PHP создает изображение из потока приложения / октета - PullRequest
3 голосов
/ 10 мая 2011

Мое приложение отправляет изображения с мобильных устройств с типом контента "application / octet-stream".

Мне нужно обработать эти изображения с помощью библиотеки GD, что означает, что мне нужно иметь возможность создавать объект изображения из данных.

Обычно я использую imagecreatefromjpeg, imagecreatefrompng, imagecreatefromgif и т. Д. Для обработки файлов, загруженных из веб-форм, но, похоже, они не работают, когда приходят ко мне как application / octet-stream.

Есть идеи, как мне достичь своей цели?

EDIT

Вот код, который я использую для создания идентификатора изображения ... мой обработчик отлично работает по всему сайту, единственное отличие, которое я могу отличить между моим сайтом и данными из iOS, - это тип контента

public function open_image($path) {
        # JPEG:
        $im = @imagecreatefromjpeg($path);
        if ($im !== false) { $this->image = $im; return $im; }

        # GIF:
        $im = @imagecreatefromgif($path);
        if ($im !== false) { $this->image = $im; return $im; }

        # PNG:
        $im = @imagecreatefrompng($path);
        if ($im !== false) { $this->image = $im; return $im; }

        $this->error_messages[] = "Please make sure the image is a jpeg, a png, or a gif.";
        return false;
    }

Ответы [ 3 ]

5 голосов
/ 10 мая 2011

Легко:)

$image = imagecreatefromstring( $data );

В частности:

$data = file_get_contents($_FILES['myphoto']['tmp_name']);
$image = imagecreatefromstring( $data );
0 голосов
/ 19 октября 2012

Вы также можете использовать эту функцию.это не требует никакой другой зависимости.и отлично работают и для других типов.

function _getmime($file){
    if($info = @getimagesize($file)) {
        return image_type_to_mime_type($info[2]);
    } else {
        return mime_content_type($file);
    }
} 
0 голосов
/ 10 февраля 2012

Я нашел это на форуме codeigniter способ изменить MIME, и он работает, я думаю, вы можете использовать и для других платформ, это ссылка и этот код:

//if mime type is application/octet-stream (psp gives jpegs that type) try to find a   more specific mime type

$mimetype = strtolower(preg_replace("/^(.+?);.*$/", "\\1", $_FILES['form_field']  ['type'])); //reg exp copied from CIs Upload.php

if($mimetype == 'application/octet-stream'){
    $finfo = finfo_open(FILEINFO_MIME, '/usr/share/file/magic');
    if($finfo){
    $_FILES['form_field']['type'] = finfo_file($finfo, $_FILES['form_field']['tmp_name']);
    finfo_close($finfo);
    }
    else echo "finfo_open() returned false");
}  

На сервере должно быть установлено расширение Fileinfo.

У меня это сработало.

...