我尝试使用gdlib将部分透明的png转换为php中的jpg。我找到了两个片段来帮助我,但两种方法都有同样的问题:半透明颜色较暗,看起来不正确。这里有一个来自photoshop的放大样本:离开了png(背景为白色而不是透明),右边将转换后的png改为jpg,并使用了我使用的两个片段:
difference png (left) to jpg (right)
这里是原始的Png文件:golf.png
任何帮助都会非常感激!
$input_file = "card/golf.png";
$output_file1 = "card/golf1.jpg";
$output_file2 = "card/golf2.jpg";
$image = imagecreatefrompng($input_file);
$bg = imagecreatetruecolor(imagesx($image), imagesy($image));
imagefill($bg, 0, 0, imagecolorallocate($bg, 255, 255, 255));
imagealphablending($bg, TRUE);
imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image));
imagejpeg($bg, $output_file1, 100);
imagedestroy($bg);
imagedestroy($image);
list($width, $height) = getimagesize($input_file);
$image = imagecreatefrompng($input_file);
$output = imagecreatetruecolor($width, $height);
$white = imagecolorallocate($output, 255, 255, 255);
imagefilledrectangle($output, 0, 0, $width, $height, $white);
imagecopy($output, $image, 0, 0, 0, 0, $width, $height);
imagejpeg($output, $output_file2, 100);
imagedestroy($output);
答案 0 :(得分:0)
你正在遭受量化。 JPEG根本不能很好地处理这种类型的图像。如果要减少颜色变化,则需要调整量化表。如果对量化表使用全1,则不会得到颜色变化。