PHP从application / octet流创建图像

时间:2011-05-09 21:22:38

标签: php image gd content-type

我的应用程序是从内容类型为“application / octet-stream”的移动设备发送给它的图像。

我需要使用GD库处理这些图像,这意味着我需要能够从数据中创建图像对象。

通常情况下,我一直在使用imagecreatefromjpeg,imagecreatefrompng,imagecreatefromgif等来处理从Web表单上传的文件,但是当我作为application / octet-stream来找我时这些似乎不起作用。

关于如何实现目标的任何想法?

修改

以下是我用来创建图片标识符的代码...我的处理程序在我的网站中运行得很好,我在网站和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 个答案:

答案 0 :(得分:5)

简单:)

$image = imagecreatefromstring( $data );

具体做法是:

$data = file_get_contents($_FILES['myphoto']['tmp_name']);
$image = imagecreatefromstring( $data );

答案 1 :(得分:0)

我在codeigniter论坛中发现了一个改变mime的方法,它可以工作,我想你也可以用于其他框架,这是link,这就是代码:

//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扩展。

它对我有用。

答案 2 :(得分:0)

您也可以使用此功能。它不需要任何其他依赖。并且也适用于其他类型。

function _getmime($file){
    if($info = @getimagesize($file)) {
        return image_type_to_mime_type($info[2]);
    } else {
        return mime_content_type($file);
    }
}