Функция WP_GET_IMAGE_MIME() в WordPress 4.7.1: описание, примеры, изменения

Функция WP_GET_IMAGE_MIME() в WordPress 4.7.1

Функция wp_get_image_mime() помогает определить реальный MIME-тип (тип содержимого) файла изображения.

Зачем это нужно?

Иногда мы не можем доверять названию файла, так как оно может быть неверным. Например, файл с расширением .jpg может на самом деле быть изображением формата .png.

Для точного определения MIME-типа используются несколько функций PHP:

  • exif_imagetype() — позволяет определить тип изображения.
  • image_type_to_mime_type() — возвращает MIME-тип на основе типа изображения, который получен с помощью других функций.
  • getimagesize() — позволяет получить размеры изображения.

Использует:

Функция используется в wp_check_filetype_and_ext().

Возвращаемое значение

Функция возвращает строку с MIME-типом или false, если тип определить невозможно.

Применение

wp_get_image_mime( $file );

Где:

  • $file (string) — обязательный параметр, указывающий полный путь к файлу изображения.

Пример использования

$image_path = get_template_directory() . '/screenshot.png';
echo wp_get_image_mime( $image_path ); //> image/png

Изменения

  • С версии 4.7.1 функция была добавлена.
  • С версии 5.8.0 добавлена поддержка изображений WebP.
  • С версии 6.5.0 добавлена поддержка изображений AVIF.
  • С версии 6.7.0 добавлена поддержка изображений HEIC.

Код функции wp_get_image_mime()

function wp_get_image_mime( $file ) {
    try {
        if ( is_callable( 'exif_imagetype' ) ) {
            $imagetype = exif_imagetype( $file );
            $mime      = ( $imagetype ) ? image_type_to_mime_type( $imagetype ) : false;
        } elseif ( function_exists( 'getimagesize' ) ) {
            if ( defined( 'WP_DEBUG' ) && WP_DEBUG && ! defined( 'WP_RUN_CORE_TESTS' ) ) {
                $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;
        }

        $magic = bin2hex( $magic );
        if (
            ( str_starts_with( $magic, '52494646' ) ) &&
            ( 16 === strpos( $magic, '57454250' ) )
        ) {
            $mime = 'image/webp';
        }

        $magic = str_split( $magic, 8 );

        if ( isset( $magic[1] ) && isset( $magic[2] ) && 'ftyp' === hex2bin( $magic[1] ) ) {
            if ( 'avif' === hex2bin( $magic[2] ) || 'avis' === hex2bin( $magic[2] ) ) {
                $mime = 'image/avif';
            } elseif ( 'heic' === hex2bin( $magic[2] ) ) {
                $mime = 'image/heic';
            } elseif ( 'heif' === hex2bin( $magic[2] ) ) {
                $mime = 'image/heif';
            } else {
                if ( extension_loaded( 'fileinfo' ) ) {
                    $fileinfo  = finfo_open( FILEINFO_MIME_TYPE );
                    $mime_type = finfo_file( $fileinfo, $file );
                    finfo_close( $fileinfo );

                    if ( wp_is_heic_image_mime_type( $mime_type ) ) {
                        $mime = $mime_type;
                    }
                }
            }
        }
    } catch ( Exception $e ) {
        $mime = false;
    }

    return $mime;
}

Связанные функции

  • get_post_mime_type()
  • wp_get_mime_types()

Изображения

  • file_is_displayable_image()
  • image_downsize()
  • next_image_link()
  • previous_image_link()
  • wp_attachment_is_image()
  • wp_get_attachment_caption()
  • wp_get_attachment_image()
  • wp_get_attachment_image_sizes()
  • wp_get_attachment_image_src()
  • wp_get_attachment_image_srcset()
  • wp_get_attachment_image_url()

Эта информация поможет вам лучше понять, как работает функция wp_get_image_mime() и как использовать её для работы с изображениями в WordPress.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *