私はこの画像スケーリングの議論に興味をそそられ、その後、アップロードされた画像からサムネイルを作成するために使用しているPHPコードにも同じ問題があることがわかりました。下部に投稿されたPHP修正を試すことにしました(ガンマを2.2から1.0に変換し、画像のサイズを変更し、ガンマを1.0から2.2に戻します)。これは、記事に記載されている問題を解決するために機能しますが、コードに対するこの変更には、PNGアルファチャネルの透過性をノックアウトするという不幸な副作用があります。
これが、ガンマ補正を行った状態のコードです。
<?php
$image = imagecreatefrompng($source_file);
$resized_image = imagecreatetruecolor($new_width, $new_height);
imagealphablending($resized_image, false);
imagesavealpha($resized_image, true);
imagegammacorrect($image, 2.2, 1.0);
imagecopyresampled($resized_image, $image, 0, 0, 0, 0, $new_width, $new_height, $image_width, $image_height);
imagegammacorrect($resized_image, 1.0, 2.2);
imagepng($resized_image, $dest_file);
?>
元の画像のアルファチャネルの透明度を維持しながら、ガンマ補正のトリックを使用して画像のサイズを変更する方法を知っている人はいますか?
編集
サンプル画像:
- 元のファイル-アルファチャネル透過性のあるPNG
- 両方のimagegammacorrect()関数呼び出しがコメントアウトされたサイズ変更されたファイル
- 両方のimagegammacorrect()関数呼び出しが配置されたサイズ変更されたファイル
ガンマを修正しようとするまで、透明度は良好であることがわかります。(以下で透明度が機能していることを確認する最も簡単な方法は、画像にラップされている段落タグを調べて、FireBugなどを介してスタイル属性に黒の背景を追加することです。)
元の画像http://ender.hosting.emarketsouth.com/images/test-image.png ガンマ補正なしhttp://ender.hosting.emarketsouth.com/images/test-image-resized-no-gamma.png ガンマ修正済み-透明性なしhttp://ender.hosting.emarketsouth.com/images/test-image-resized.png