0

私は何日もこれを理解しようとしてきました。画像をアップロードし、正方形にトリミングし、300x300 にサイズ変更してから、150x150 にサイズ変更し、「uploads/products/$id/」フォルダーにアップロードしてから、ファイルパスを mysql データベースに押し込む必要があります。

ただし、黒い画像が出力され続けます。このスクリプトの何が問題になっていますか?

$ext = explode('.', $_FILES['image1']['name']);
$extension = $ext[1];
$target_path = 'uploads/products/'.$id.'/';
$filename = 'featuredpic.'.$extension;

$featured100_full_path = $target_path.$filename;

if(!is_dir('../../../uploads/products/'.$id)){
    mkdir('../../../uploads/products/'.$id, 0777);
}

if(file_exists('../../../'.$featured100_full_path)) {
    chmod('../../../'.$featured100_full_path, 0755);
    unlink('../../../'.$featured100_full_path);
}

if(!move_uploaded_file($_FILES['image1']['tmp_name'], '../../../'.$featured100_full_path)){
    echo 'Error: Image Not Uploaded!';
}

if($extension=="jpg" || $extension=="jpeg" ){
$uploadedfile = $_FILES['image1']['tmp_name'];
$src = imagecreatefromjpeg($uploadedfile);
    }
else if($extension=="png"){
$uploadedfile = $_FILES['image1']['tmp_name'];
$src = imagecreatefrompng($uploadedfile);
} else {
$src = imagecreatefromgif($uploadedfile);}

list($width, $height) = getimagesize($filename);
$newwidth = 300;
$newheight = 300;
$featured300 = imagecreatetruecolor($newwidth, $newheight);

$newwidth1 = 150;
$newheight1 = 150;
$featuredthumb = imagecreatetruecolor($newwidth1, $newheight1);

imagecopyresampled($featured300,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
imagecopyresampled($featuredthumb,$src,0,0,0,0,$newwidth1,$newheight1,$width,$height);

$filename_featured300 = 'uploads/products/'.$id.'/featured300.'.$extension;
$filename_featuredthumb = 'uploads/products/'.$id.'/featuredthumb.'.$extension;

imagejpeg($featured300, '../../../'.$filename_featured300,100);
imagejpeg($featuredthumb, '../../../'.$filename_featuredthumb,100);

imagedestroy($src);
imagedestroy($tmp);
imagedestroy($tmp1);
4

1 に答える 1

0

この関数が黒い画像の理由である可能性があります:http: //php.net/manual/en/function.imagecreatetruecolor.php

私は個人的に各変更プロセスをステップスルーして、それが機能し、期待どおりのことを実行していることを確認します。このコードの多くは危険であることを認めなければなりません。

$ext = explode('.', $_FILES['image1']['name']);
$extension = $ext[1];

あなたはファイル拡張子にあまりにも多くの信頼を置いています、これはより安全です:http: //php.net/manual/en/function.finfo-file.php

ただし、これが追加のPECL拡張機能であることは承知しています。したがって、ドットでの爆発を選択した理由を理解してください。ファイルのアップロード、ディレクトリ構造などのラッパーを記述せずにコードのバグを削除することは非常に困難です。

ヒント:変換チェーンの各フェーズで表示するために、画像を数字の拡張子が付いた一時ディレクトリに移動し続けます-欠陥をすばやく特定する必要があります!これがお役に立てば幸いです。申し訳ありませんが、これ以上お役に立てることはありません。

于 2012-12-07T00:09:55.467 に答える