wp_get_image_mime() │ WP 4.7.1
Gets the real MIME type of an image file.
We can't trust to the image type in the image name, for example png image can be called image.jpg.
PHP functions are used to accurately determine mime:
1 time — 0.135771 sec (extremely slow) | 50000 times — 176.48 sec (extremely slow) | PHP 7.1.11, WP 4.9.4
No Hooks.
Return
String|false
. The actual mime type or false if the type cannot be determined.
Usage
wp_get_image_mime( $file );
- $file(string) (required)
- Full path to the file.
Examples
#1 Get the mime type of the image in the template files (screenshot of the theme)
$image_path = get_template_directory() . '/screenshot.png';
echo wp_get_image_mime( $image_path ); //> image/png
Changelog
Since 4.7.1 |
Introduced. |
Since 5.8.0 |
Added support for WebP images. |
Since 6.5.0 |
Added support for AVIF images. |
wp_get_image_mime() wp get image mime code
WP 6.6.2
function wp_get_image_mime( $file ) {
/*
* Use exif_imagetype() to check the mimetype if available or fall back to
* getimagesize() if exif isn't available. If either function throws an Exception
* we assume the file could not be validated.
*/
try {
if ( is_callable( 'exif_imagetype' ) ) {
$imagetype = exif_imagetype( $file );
$mime = ( $imagetype ) ? image_type_to_mime_type( $imagetype ) : false;
} elseif ( function_exists( 'getimagesize' ) ) {
// Don't silence errors when in debug mode, unless running unit tests.
if ( defined( 'WP_DEBUG' ) && WP_DEBUG
&& ! defined( 'WP_RUN_CORE_TESTS' )
) {
// Not using wp_getimagesize() here to avoid an infinite loop.
$imagesize = getimagesize( $file );
} else {
$imagesize = @getimagesize( $file );
}
$mime = ( isset( $imagesize['mime'] ) ) ? $imagesize['mime'] : false;
} else {
$mime = false;
}
if ( false !== $mime ) {
return $mime;
}
$magic = file_get_contents( $file, false, null, 0, 12 );
if ( false === $magic ) {
return false;
}
/*
* Add WebP fallback detection when image library doesn't support WebP.
* Note: detection values come from LibWebP, see
* https://github.com/webmproject/libwebp/blob/master/imageio/image_dec.c#L30
*/
$magic = bin2hex( $magic );
if (
// RIFF.
( str_starts_with( $magic, '52494646' ) ) &&
// WEBP.
( 16 === strpos( $magic, '57454250' ) )
) {
$mime = 'image/webp';
}
/**
* Add AVIF fallback detection when image library doesn't support AVIF.
*
* Detection based on section 4.3.1 File-type box definition of the ISO/IEC 14496-12
* specification and the AV1-AVIF spec, see https://aomediacodec.github.io/av1-avif/v1.1.0.html#brands.
*/
// Divide the header string into 4 byte groups.
$magic = str_split( $magic, 8 );
if (
isset( $magic[1] ) &&
isset( $magic[2] ) &&
'ftyp' === hex2bin( $magic[1] ) &&
( 'avif' === hex2bin( $magic[2] ) || 'avis' === hex2bin( $magic[2] ) )
) {
$mime = 'image/avif';
}
} catch ( Exception $e ) {
$mime = false;
}
return $mime;
}
Related Functions