JPG不支持透明度。
但是,您可以从GIMP中导出带有透明区域的图像。在这种情况下,透明区域在您的浏览器,Windows资源管理器或其他软件中将显示为黑色或白色。
我经常收到需要处理并以几种较小格式提供的文件。我通过使用GD库的一些PHP脚本来做到这一点。问题在于,这些区域在处理后的版本中会变成黑色还是白色,这是无法预测的。即使是白色背景也可能变成黑色。
所以我的问题是,是否可以某种方式检测到GD中的“透明”区域并为其指定特定的颜色。
例如,查看这两个图像: http://www.bilbil.com/9156-thickbox_default/bus.jpg http://bilbil.com/img/p/9/1/5/6/9156.jpg
此刻我使用以下代码:
$srcfile = "9158.jpg";
$dir ="/test/";
list($width, $height, $imgtype, $attr) = @getimagesize( $dir.$srcfile );
$src = imagecreatefromjpeg($dir.$srcfile);
$newheight=$newwidth = 800;
$img = imagecreatetruecolor ( $newwidth , $newheight );
$white = imagecolorallocate($img, 255, 255, 255);
imagefill($img, 0, 0, $white);
imagecopyresampled($img, $src, ($newwidth-$width)/2, ($newheight-$height)/2, 0, 0, $width, $height, $width, $height);
if(!imagejpeg($img, $dir.'test.jpg', 97))
echo("Error creating testimage");
答案 0 :(得分:1)
在几乎所有情况下,您都可以将左上角的像素颜色用作透明颜色。
答案 1 :(得分:0)
您可以给ImageMagick一个机会。以下命令将透明地将.jpeg文件转换为.png。
convert bus.jpg \
-alpha set -fill none -fuzz 1% \
-bordercolor white -border 1 -draw 'color 0,0 floodfill' -shave 1x1 \
-bordercolor black -border 1 -draw 'color 0,0 floodfill' -shave 1x1 \
a.png
这是它的工作方式:
a.png
这是PHP的代码段:
<?php
function jpg_to_png($jpg, $png)
{
$templ = trim("
convert {{jpg}} \
-alpha set -fill none -fuzz 1% \
-bordercolor white -border 1 -draw 'color 0,0 floodfill' -shave 1x1 \
-bordercolor black -border 1 -draw 'color 0,0 floodfill' -shave 1x1 \
{{png}}
");
$cmd = strtr($templ, [
'{{jpg}}' => escapeshellarg($jpg),
'{{png}}' => escapeshellarg($png)
]);
exec($cmd, $stdout, $exitcode);
if ($exitcode) {
throw new Error("Command failed with code $exitcode");
}
}
jpg_to_png('bus.jpg', 'a.png');
以下命令(ref)在您的情况下也可能会有所帮助:
convert bus.jpg -fuzz 1% -trim +repage a.jpg
它将从输入图像中删除所有“空白”。
答案 2 :(得分:0)
我不确定您在问什么。您是从具有透明性的非JPG图像开始并转换为JPG吗?或者您已经有JPG。
如果您是从PNG或TIFF之类的透明图像开始,并且想要转换为JPG并始终具有黑色(或任何其他颜色)背景,那么在 Imagemagick 中,您可以执行以下操作:
convert image.png -background black -alpha background -alpha off image.jpg
或
convert image.png -background black -flatten image.jpg
将黑色替换为您希望透明的其他任何颜色,例如白色。
如果您已经有某种颜色的JPG并想将其更改为黑色,请执行以下操作:
convert image.jpg -fuzz XX% -fill black -opaque somecolor image.jpg
其中XX%是您要考虑将其更改为“ somecolor”并将其附近的颜色更改为“黑色”的百分比。
对不起,我不知道GD。但我希望它具有类似的功能。或者,您可以使用基于Imagemagick构建的PHP Imagick。