2

imagesx($this->image)使用しているResizerライブラリの関数に問題を引き起こしているこのJPEGがあります。ブラウザを使用して画像を表示できますが、サイズを変更しようとすると、次のエラーが発生します。

imagesx() expects parameter 1 to be resource, boolean given

エラーが発生する場合は、このファイルを処理しなくてもかまいません。PHPを使用して、この画像がPHPの画像関数で適切に処理できるかどうかを確認するにはどうすればよいですか?


ライブラリを呼び出すコード

// Download the photo
$img_content = file_get_contents($url);
if($img_content !== FALSE) {
    file_put_contents($img_documentroot . $img_subpath . $img_filename . '_tmp.jpg',
     $img_content);
}

echo $url . '<br>';
echo $img_documentroot . $img_subpath . $img_filename . '_tmp.jpg<br>';
ob_flush();
flush();

// Resize photo
Resizer::open( $img_documentroot . $img_subpath . $img_filename . '_tmp.jpg' )
->resize(300, 300, 'landscape' )
->save($img_documentroot . $img_subpath . $img_filename . '.jpg' , 90 );

// Thumbnail photo
Resizer::open( $img_documentroot . $img_subpath . $img_filename . '_tmp.jpg' )
->resize(100, 100, 'crop' )
->save($img_documentroot . $img_subpath . $img_filename . '.jpg' , 90 );

出力

また、サイズ変更される画像のフルパスをエコーアウトしました。

http://www.ApartmentsInAllstonMA.com/Images/Apts/132847_kn1.jpg
/home/photos/public_html/2012/0917/2516539_7_tmp.jpg
resource(127) of type (gd)
resource(130) of type (gd)
http://www.ApartmentsInMedford.com/Images/Apts/132847_lv2.jpg
/home/photos/public_html/2012/0917/2516539_11_tmp.jpg
resource(163) of type (gd)
resource(166) of type (gd)
http://www.AllstonApartmentX.com/images/agents/61.jpg
/home/photos/public_html/2012/0917/2516539_12_tmp.jpg
bool(false)

アップデート

これは、ライブラリが値を返す原因となっているコードスニペットfalseです。

private function open_image( $file )
{

    // If $file isn't an array, we'll turn it into one
    if ( !is_array($file) ) {
        $file = array(
            'type'      => File::mime( strtolower(File::extension($file)) ),
            'tmp_name'  => $file
        );
    }

    $mime = $file['type'];
    $file_path = $file['tmp_name'];

    switch ( $mime )
    {
        case 'image/pjpeg': // IE6
        case File::mime('jpg'): $img = @imagecreatefromjpeg( $file_path );  break;
        case File::mime('gif'): $img = @imagecreatefromgif( $file_path );   break;
        case File::mime('png'): $img = @imagecreatefrompng( $file_path );   break;
        default:                $img = false;                               break;
    }

    return $img;
}
4

2 に答える 2

3

mimeタイプをチェックすることは、JPEG画像の有効性を確認するための非常に優れた方法です。これを行う方法は次のとおりです。

$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type
$type = finfo_file($finfo, $filename) . "\n";  
if($type == "image/jpeg") { 
     //Valid JPEG Image
}
finfo_close($finfo);

エラーによると、画像リソースの代わりにブール値を送信しています。

于 2012-09-18T12:33:11.167 に答える
2

ファイルの拡張子は.JPGである可能性がありますが、必ずしも正しいファイルタイプであるとは限りません。以前、ユーザーが.PNGファイルを取得して.JPGに名前を変更するのを見たことがありますが、その方法で形式を変換できると考えていました。

また、RGB色空間の代わりにCMYK色空間を使用する有効なJPEGファイルである可能性もあります。たまに、そのうちの1つを目にします。通常は印刷デザイナーからのものです。私は通常、Photoshopでこれらを開き、[画像]-> [モード]でRGBまたはCMYKと表示されているかどうかを確認して、これらを確認します。Windowsでは、右クリックして[プロパティ]を選択し、[詳細設定]タブの下を確認することで、色空間を決定できる場合もあります。

于 2013-03-08T13:43:20.437 に答える