2

PHP で画像を回転させると、非常に奇妙な動作が発生します。回転中に元の画像が変更されています。例として、横に並べた画像を次に示します。わかりにくいですが、よく見るとナイフの周りの白い部分が#FFFFFFから#FDFDFDに変化しています。

ここに画像の説明を入力

オプションを指定せずに imagerotate を使用していますが、黒の背景色で同じことを試みると、黒の「塗りつぶし」で回転した画像が得られますが、画像の白い部分はまだ #FFFFFF から #FDFDFD に変更されています。 . 私は困惑しています。PHPが色を「丸める」ようです。

ここに画像の説明を入力

元の画像: http://i.imgur.com/iYwvxAE.jpg

回転した画像: http://i.imgur.com/0lXXuO6.jpg

編集:

これが私のコードです

$img = imagecreatefromjpeg($localFile);
$img = imagerotate($img, 45, 0);
imagejpeg($img, '/tmp/a.jpg');
4

1 に答える 1

3

わかった!imagerotate の php ドキュメント ( http://php.net/manual/en/function.imagerotate.php ) で気付きました

「注: この関数は、imagesetinterpolation() によって設定された補間方法の影響を受けます。」

次に、いくつかの異なる補間アルゴリズムを試しました。IMG_BELL は白を維持しているようです。

<?php
function LoadJpeg($imgname)
{
    $im = imagecreatefromjpeg($imgname);
    imagesetinterpolation($im, IMG_BELL);
    $im = imagerotate($im, 45, 0);
    return $im;
}

$img = LoadJpeg('test.jpg');

imagejpeg($img, 'C:\temp\a.jpg', 100);
imagedestroy($img);
于 2015-03-09T20:23:59.103 に答える