1

この関数と含まれているコードの問題を理解するのに苦労しています。

私が言えるすべての集中的な目的は、まったく問題なく機能するはずです。

私は GD ライブラリ 2.034 を実行していますが、これは私が実行しているコードです:

function createthumb($name,$filename,$new_w,$new_h){
$system=explode('.',$name); 
if (preg_match('/jpg|jpeg/',$system[1])){ 
    $src_img=imagecreatefromjpeg($name);
} 
if (preg_match('/png/',$system[1])){ 
    $src_img=imagecreatefrompng($name); 
}

//sizing 
$old_x=imageSX($src_img); 
$old_y=imageSY($src_img); 
if ($old_x > $old_y) { 
    $thumb_w=$new_w; 
    $thumb_h=$old_y*($new_h/$old_x); 
} 
if ($old_x < $old_y) { 
    $thumb_w=$old_x*($new_w/$old_y); 
    $thumb_h=$new_h; 
} 
if ($old_x == $old_y) { 
    $thumb_w=$new_w; $thumb_h=$new_h; 
}

//keep colours 
$dst_img=ImageCreateTrueColor($thumb_w,$thumb_h); 
imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);

//rebuild image 
if (preg_match("/png/",$system[1])) { 
    imagepng($dst_img,$filename); 
} 
else { 
    imagejpeg($dst_img,$filename); 
} 
imagedestroy($dst_img); 
imagedestroy($src_img); 
}

次に、これで実行されます:

$filenameresize = strtolower($_FILES['pic']['name']);
$mkfilename = time() . strrchr($filenameresize, '.');
$newfilename = $imagepath . $mkfilename;
createthumb($newfilename, $imagepath . "/thumbs/tn_" . $mkfilename,100,100);

エコー

$新しいファイル名
createthumb 関数の前にエコーされた場合はその名前を示しますが、後でエコーされた場合は生成されません。

私は何を逃したのですか?

4

1 に答える 1

1

さて、私はそれを修正しました!

これが解決策です。

問題はコードごとのファイル タイプのコレクションにあり、preg のマッチングが正しく行われませんでした。

これらの行を追加しました:

list($old_x, $old_y, $type) = getimagesize($name);
switch ($type)
 {
case 1:   //   gif -> jpg
  $src_img = imagecreatefromgif($name);
break;

case 2:   //   jpeg -> jpg
  $src_img = imagecreatefromjpeg($name); 
break;

case 3:  //   png -> jpg
  $src_img = imagecreatefrompng($name);
break;
}

これらの行を削除しました:

$system=explode('.',$name); 
if (preg_match('/jpg|jpeg/',$system[1])){ 
  $src_img=imagecreatefromjpeg($name);
} 
if (preg_match('/png/',$system[1])){ 
  $src_img=imagecreatefrompng($name); 
}

$old_x=imageSX($src_img); 
$old_y=imageSY($src_img); 

これがあなたの何人かを助けることを願っています。

于 2012-09-01T21:10:18.903 に答える