7

我有一个功能可以即时制作 url 图像的缩略图!我总是将 jpg 类型的图像传递给此函数,但是当我传递带有“.jpg”扩展名的图像时会出现问题。但是当我尝试获取它的 mime 类型时,我发现它是“ application/octet-stream ” .. 在这个php 页面中,这个 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";
        } 
} 
4

3 回答 3

2

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

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

另见:

于 2012-03-14T17:47:53.560 回答
1

我现在正在处理同样的事情。

我正在测试一些图像,.gif、.jpeg、.png ... 使用finfo我发现您读取的 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,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);

你得到了不同的价值:

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

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

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

因此,您必须在测试 mimetypes 时测试您阅读的内容。请参阅Fileinfo 预定义常量

希望能帮助到你

于 2018-06-17T06:41:07.193 回答
0

在 application/octet-stream 的情况下,您可以获取原始文件名并检查其扩展名。如果它是jpg你应该很高兴

于 2015-02-18T13:39:21.180 回答