1

私は現在、画像(PNG、GIF、JPG)のサイズを変更してJPEGとして保存するPHPスクリプト(私が作成したものではありません)のフロントエンドを作成しています。非常にシンプルで、JPEGを入力する場合は正常に機能しますが、PNGまたはGIF画像では機能しないようです。

リサイザーのコードは次のとおりです。

<?php
header ("Content-type: image/jpeg");
$img = $_GET['img'];
header("Content-Disposition: attachment; filename=resized-$img");
$percent = $_GET['percent'];
$constrain = $_GET['constrain'];
$w = $_GET['w'];
$h = $_GET['h'];

// get image size of img
$x = @getimagesize($img);
// image width
$sw = $x[0];
// image height
$sh = $x[1];

if ($percent > 0) {
    // calculate resized height and width if percent is defined
    $percent = $percent * 0.01;
    $w = $sw * $percent;
    $h = $sh * $percent;
} else {
    if (isset ($w) AND !isset ($h)) {
        // autocompute height if only width is set
        $h = (100 / ($sw / $w)) * .01;
        $h = @round ($sh * $h);
    } elseif (isset ($h) AND !isset ($w)) {
        // autocompute width if only height is set
        $w = (100 / ($sh / $h)) * .01;
        $w = @round ($sw * $w);
    } elseif (isset ($h) AND isset ($w) AND isset ($constrain)) {
        // get the smaller resulting image dimension if both height
        // and width are set and $constrain is also set
        $hx = (100 / ($sw / $w)) * .01;
        $hx = @round ($sh * $hx);

        $wx = (100 / ($sh / $h)) * .01;
        $wx = @round ($sw * $wx);

        if ($hx < $h) {
            $h = (100 / ($sw / $w)) * .01;
            $h = @round ($sh * $h);
        } else {
            $w = (100 / ($sh / $h)) * .01;
            $w = @round ($sw * $w);
        }
    }
}

$im = @ImageCreateFromJPEG ($img) or // Read JPEG Image
$im = @ImageCreateFromPNG ($img) or // or PNG Image
$im = @ImageCreateFromGIF ($img) or // or GIF Image
$im = false; // If image is not JPEG, PNG, or GIF

if (!$im) {
    // We get errors from PHP's ImageCreate functions...
    // So let's echo back the contents of the actual image.
    readfile ($img);
} else {
    // Create the resized image destination
    $thumb = @ImageCreateTrueColor ($w, $h);
    // Copy from image source, resize it, and paste to image destination
    @ImageCopyResampled ($thumb, $im, 0, 0, 0, 0, $w, $h, $sw, $sh);
    // Output resized image
    @ImageJPEG ($thumb);

}
?>

png / gifオプションが機能しない理由を理解できますか?GDを最新の状態にして、すべての形式で有効にし、php5.3.3を実行しています

前もって感謝します。

4

3 に答える 3

3

$xからの配列の3番目の項目にgetimagesize()は、画像のmimeタイプが含まれています。orステートメントを使用してすべてのタイプを試す代わりに、これを使用する必要があります。

switch ( $x[2] ) 
{
  case 1: $im = imagecreatefromgif($img); break;
  case 2: $im = imagecreatefromjpeg($img); break;
  case 3: $im = imagecreatefrompng($img); break;
  default: trigger_error('Unsupported filetype!', E_USER_WARNING);  break;
}
于 2011-07-04T16:56:22.273 に答える
0

imagecreatefromstring(file_get_contents($img))あなたの恐ろしい構成の代わりに試してみてください。または、適切なswitchステートメントを実行し、それぞれを順番に試すのではなく、どちらを使用するかを明示的に決定します。

于 2011-07-04T16:56:30.017 に答える
0

Francois Deschenes がすでに言ったことに加えて... それらをすべて削除し@、( ) でエラー報告をオンにしてくださいerror_reporting(E_ALL);。このスクリプトを自分でデバッグすることはほとんど不可能なほど、考えられるエラーの原因を抑制しました。@どこにも 1 つも使用しないスクリプトを作成してみてください...

于 2011-07-04T17:09:02.247 に答える