[PHP-users 25924] ImageCopyによる画質の劣化

ムラカミ zrp33 @ yahoo.co.jp
2005年 6月 27日 (月) 23:00:52 JST


はじめまして、ムラカミと申します。

メーリングリストに初めて投稿させていただきます。よろしくお願いします。

早速ですが、PHPで新規作成した画像($image)に、GET値のjpg($image1)とpng($image2)の2つの画像を合成させて1枚の画像を新規作成するという処理をしたいのですが、合成した画像のjpg部分の画質が落ちます。

環境は
・WindowsXP
・PHP v4.3.11
・AN HTTP Daemon v1.42m
です。

そして以下がスクリプトです。

<?php

$width = 100;
$height = 20;
$image = ImageCreate($width,$height); // 下地画像
$white = ImageColorallocate($image,255,255,255);
ImageFilledRectangle($image,0,0,$width,$height,$white); // 下地画像を白で塗りつぶす

$image2 = ImageCreateFromPng($_GET['img2']);
$image1 = ImageCreateFromJpeg($_GET['img1']);

ImageCopy($image,$image1,0,0,0,0,50,50); // 下地にjpg写真をコピー
ImageCopy($image,$image2,50,0,0,0,50,50); // 下地+jpg写真にpng画像をコピー

header("Content-type: image/png");
Imagepng($image); // 合成画像を出力
ImageDestroy($image); // リソース開放

?>

合成時のJPG部分のコントラストが強いというか、中間色が表示されないので劣化した写真になってしまいます。
ImageCopyの順を変えると、同様に劣化した写真になりますが、色が変わります。
きっと色パレットに問題があるのだと思うのですが、その反面ソース自体が欠陥なのでは?という疑問もあります(稚拙なソースですいません)。

JPGとPNGの画質を落とさずに合成できるお知恵を貸していただけませんでしょうか。
よろしくお願いいたします。

ムラカミ





PHP-users メーリングリストの案内