0

私は書く時間があまりないので、私の問題を教えてください。私は画像をトリミングするphpコードを持っています.良いことは、$thumb_widthと$thumb_heightを同じ値にすると、画像が非常にうまくトリミングされることです.この場合、この解像度 (200*150) の画像が必要なわけではありません。ここにコードがあり、間違いを見つけることができません。

<?php
function create_thumb($directory, $image, $destination) {
$image_file = $image;
$image = $directory.$image;

if (file_exists($image)) {

$source_size = getimagesize($image);

if ($source_size !== false) {

  $thumb_width = 200;
  $thumb_height = 150;

  switch($source_size['mime']) {
    case 'image/jpeg':
         $source = imagecreatefromjpeg($image);
    break;
    case 'image/png':
         $source = imagecreatefrompng($image);
    break;
    case 'image/gif':
         $source = imagecreatefromgif($image);
    break;
  }

  $source_aspect = round(($source_size[0] / $source_size[1]), 1);
  $thumb_aspect = round(($thumb_width / $thumb_height), 1);

  if ($source_aspect < $thumb_aspect) {
    $new_size = array($thumb_width, ($thumb_width / $source_size[0]) * $source_size[1]);
    $source_pos = array(0, ($new_size[1] - $thumb_height) / 2);
  } else if ($source_aspect > $thumb_aspect) {
    $new_size = array(($thumb_width / $source_size[1]) * $source_size[0], $thumb_height);
    $source_pos = array(($new_size[0] - $thumb_width) / 2, 0);
  } else {
    $new_size = array($thumb_width, $thumb_height);
    $source_pos = array(0, 0);
  }

  if ($new_size[0] < 1) $new_size[0] = 1;
  if ($new_size[1] < 1) $new_size[1] = 1;

  $thumb = imagecreatetruecolor($thumb_width, $thumb_height);
  imagecopyresampled($thumb, $source, 0, 0, $source_pos[0], $source_pos[1], $new_size[0],                                                                $new_size[1], $source_size[0], $source_size[1]);

  switch($source_size['mime']) {
    case 'image/jpeg':
         imagejpeg($thumb, $destination.$image_file);
    break;
    case 'image/png':
          imagepng($thumb, $destination.$image_file);
    break;
    case 'image/gif':
         imagegif($thumb, $destination.$image_file);
    break;
}


}

}
}
?>

この例では、(533px*300px) の画像を配置すると、変形し、「申し訳ありませんが私の英語 =)」でラップされます。これについて助けが必要です。あなたが解決策を見つけたら、私は本当に喜んでいます。

ありがとう、マティアス。

4

2 に答える 2

1

このidディリ。

46行目では、より多くのスペースを指定しているため、その行の不要なスペースを削除する必要があります。

于 2012-10-18T06:42:30.077 に答える
0

はい。複数のスペースを指定した場合でも、通常は 1 つのスペースしかありません。しかし、ここでは「 」の倍数のようなスペースが存在します。

間違った構文: imagecopyresampled($thumb, $source, 0, 0, $source_pos[0], $source_pos[1], $new_size[0], $new_size[1], $source_size[0], $source_size[1] );

正しい構文 : imagecopyresampled($thumb, $source, 0, 0, $source_pos[0], $source_pos[1], $new_size[0],$new_size[1], $source_size[0], $source_size[1] );

于 2012-11-01T09:15:02.313 に答える