【问题标题】:how handling image's mime type "application/octet-stream"?如何处理图像的 mime 类型“application/octet-stream”?
【发布时间】:2012-03-31 05:19:08
【问题描述】:

我有一个功能可以即时制作网址图像的缩略图! 我总是将 jpg 类型的图像传递给此函数,但是当我传递带有“.jpg”扩展名的图像时会出现问题。但是当我尝试获取它的 mime 类型时,我发现它是“application/octet-stream”.. 在这个 php page 中,这个 mime 类型指的是一种

IMAGETYPE_JPC,IMAGETYPE_JPX,IMAGETYPE_JB2

我需要修改我的函数来处理这种 mime 类型吗??

通知^^^^^^

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";
        } 
} 

【问题讨论】:

    标签: php thumbnails mime-types gd2


    【解决方案1】:

    我们无法告诉您,因为 application/octet-stream 是一种通用类型的二进制文件 mime 类型。它可以是一切。您可以在文件二进制内容上尝试使用imagecreatefromstring。但请保持手指交叉;)。

    这里的实际问题是getimagesize 独立于您用于调整图像大小的 GD 库。因此,它提供了有关 GD 本身无法处理的文件的信息。因此,您可以只输出某种“不支持的图像类型”,直到找到一些能够处理特定 mime 或更好的图像类型的库。

    参见:

    【讨论】:

    • 是的,因为 GD 库不支持打开(、调整大小和输出)这些格式。或者你得到的哑剧类型主要是提供信息的。您必须使用其他能够处理这些格式的图像库。
    • 对不起,我不是图像处理方面的专家......你能告诉我'其他图像库能够处理这些格式'
    • 对不起,我不能告诉你。如果您想了解更多信息,您应该将$file_dimensions[2](mime 类型旁边)的实际值添加到您的问题中。正如所写,mime-type 非常通用,所以更有趣的是 image type。
    【解决方案2】:

    对于application/octet-stream,你可以得到原始文件名并检查它的扩展名。如果它是 jpg 你应该很好去

    【讨论】:

    • 谁投了反对票,也应该添加他的观点。这对我来说非常有用。
    • 我会否决它,我会告诉你原因。 php 有一个设置,它决定了最大帖子大小设置,但小于允许 php 在内存中使用的总空间量。一个例子:post_max_size='2m'memory_limit="128M" 将导致图像通过流而不是简单的图像/jpeg 提供。这是因为它以块的形式提供图像,直到整个图像被上传。
    【解决方案3】:

    我刚才也在做同样的事情。

    我正在使用finfo 测试一些图像,.gif、.jpeg、.png ... 我发现您读取的 mime 类型取决于您用于读取文件的常量。更多的!您将 application/octet-stream 作为图像中的 mimetype 读取!并且该信息没有错。 参见:

    如果你使用不带常量的 finfo_open():

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

    你得到了你期望的 mime 类型:

    如果 .svg -> HTML 文档,ASCII 文本,行很长,没有行终止符

    如果 .jpg(来自您的手机摄像头)-> JPEG 图像数据,EXIF 标准 2.2

    如果 .gif(从绘画中保存)-> GIF 图像数据,版本 89a,w x h

    在使用像 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);
    

    你得到了不同的价值:

    如果 .svg -> 文本/纯文本

    如果 .jpg(来自您的手机摄像头)-> application/octet-stream

    如果 .gif(从绘画中保存)-> application/octet-stream

    因此,您必须在测试 mimetype 时测试您阅读的内容。见Fileinfo Predefined constants

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2015-02-17
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2013-08-25
      • 1970-01-01
      • 2012-05-06
      • 2018-09-11
      相关资源
      最近更新 更多