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 を MIME タイプとして読み取ります。そしてその情報は間違っていません。見る:

定数なしで 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 の場合 -> テキスト/プレーン

.jpg の場合 (携帯電話のカメラから) -> application/octet-stream

if .gif (ペイントから保存) -> application/octet-stream

したがって、MIME タイプをテストするときは、読み取った内容をテストする必要があります。Fileinfo 定義済み定数を参照してください。

それが役に立てば幸い

于 2018-06-17T06:41:07.193 に答える
0

application/octet-stream の場合、元のファイル名を取得し、その拡張子を確認できます。そのjpgの場合、あなたは行ってもいいはずです

于 2015-02-18T13:39:21.180 に答える