Как обрабатывать MIME-изображения типа "application / octet-stream"? - PullRequest
5 голосов
/ 14 марта 2012

У меня есть функция, чтобы сделать эскиз URL-изображения на лету! Я всегда передаю этой функции изображения с типом jpg, но проблема возникает, когда я передаю изображение с расширением ".jpg". но когда я пытаюсь получить MIME-тип, я обнаружил, что это " application / octet-stream " .. на этой php-странице , этот MIME-тип относится к одному из

IMAGETYPE_JPC, IMAGETYPE_JPX, IMAGETYPE_JB2

что мне нужно изменить мою функцию для обработки этого типа пантомимы ??

уведомление ^^^^^^

function thumb($path,$width,$height) // $path => image url
{
        $file_dimensions = getimagesize($path);
        $file_type = image_type_to_mime_type($file_dimensions[2]);
        list($Cwidth, $Cheight) = getimagesize($path);
        if ($file_type=='image/jpeg'||$file_type=='image/pjpeg'){
            // Load
        $thumb = imagecreatetruecolor($width, $height);
        $source = imagecreatefromjpeg($path);
        // Resize
        imagecopyresized($thumb, $source, 0, 0, 0, 0, $width, $height, $Cwidth, $Cheight);
        header('Content-Type: image/jpeg');
        imagejpeg($thumb);
        }
        else if ($file_type=='application/octet-stream')
        {
           // ^^^^^ what I should write here
        }
        else
        {
            echo "Not supported type";
        } 
} 

Ответы [ 3 ]

1 голос
/ 17 июня 2018

Я сейчас работаю над тем же самым.

Я тестировал некоторые изображения, .gif, .jpeg, .png ... используя finfo Я обнаружил, что тип mime, который вы читаете, зависитна константы, которые вы используете для чтения файла.Больше!Вы читаете application / octet-stream как mimetype из изображений!и эта информация не ошибается. См .:

Если вы используете finfo_open () без констант:

<?php
$finfo = finfo_open();
$FileInfo = finfo_file($finfo, $tmp_name);
finfo_close($finfo);

Вы получите ожидаемый тип пантомимы:

Если.svg -> HTML-документ, текст ASCII, с очень длинными строками, без разделителей строк

If .jpg (с камеры вашего телефона) -> данные изображения JPEG, стандарт EXIF ​​2.2

If.gif (сохранено из рисования) -> данные изображения GIF, версия 89a, wxh

при использовании такой константы, как FILEINFO_MIME_TYPE

<?php
$finfo = finfo_open(FILEINFO_MIME_TYPE, $mf); // $mf is a magic file
$FileInfo = finfo_file($finfo, $tmp_name);
finfo_close($finfo);

, вы получаете другое значение:

if .svg -> text / plain

if .jpg (с камеры вашего телефона) -> application / octet-stream

if .gif (сохранено из краски)-> application / octet-stream

Таким образом, вы должны проверить то, что читаете при тестировании mimetypes.См. Fileinfo Предопределенные константы

Надеюсь, это поможет

0 голосов
/ 18 февраля 2015

В случае application / octet-stream Вы можете получить оригинальное имя файла и проверить его расширение. Если это JPG, вы должны быть хороши, чтобы пойти

0 голосов
/ 14 марта 2012

Мы не можем вам сказать, потому что application/octet-stream является своего рода mime-типом общего типа двоичного файла. Это может быть что угодно. Вы можете попробовать с imagecreatefromstring для двоичного содержимого файлов. Но держите пальцы скрещенными;).

Фактическая проблема здесь в том, что getimagesize не зависит от библиотеки GD, которую вы используете для изменения размера изображения. Таким образом, он предоставляет информацию о файлах, с которыми GD не может справиться. Таким образом, вы можете просто выводить какой-то «неподдерживаемый тип изображения», пока не найдете дополнительную библиотеку, способную работать с конкретным mime- или, лучше сказать, типом изображения.

Смотрите также:

...