相关疑难解决方法(0)

如何在调整图像大小时阻止GD2清除颜色?

我使用CodeIgniter 1.7开发了一个照片共享社区网站.成员上传的照片会自动调整为多种格式,我使用CodeIgniter Image Manipulation类.该类内置于框架中,基本上是多个图像处理库的包装器,如GD,GD2,ImageMagick和NETPBM.在我的主机上,我只能使用GD2,所以这就是这个问题的所在.

关于我的问题.以下是我网站上已调整大小的照片示例.请注意,原件非常大,宽度超过3000像素:

http://www.jungledragon.com/image/195/female_impala_close-up.html

现在,看看同样的图像,也调整大小,在Flickr上稍大一些:

http://www.flickr.com/photos/fledder/3763538865/in/set-72157621744113979

看到戏剧性的差异?我正试图弥合这个巨大的差距.我做的第一件事是对图像应用锐化滤镜.你可以在这里看到结果:

在此输入图像描述

虽然仍然不完美,但它至少接近Flickr图像的清晰度水平.剩下的问题是颜色被冲走,好像它们的饱和度降低了.这种情况发生在锐化滤镜之前,因此它必须在GD2中.

这个问题对我来说至关重要,但我不知道在哪里看.我发现一些.NET线程正在谈论色度子采样,但我不知道在我的设置中如何处理这些信息.我正在寻找在我的设置约束下工作的任何解决方案.

更新:这里是原始文件,就像我将它上传到我的网站和Flickr一样:

http://www.jungledragon.com/img/DSC07275.jpg

更新2:我很震惊.好的方式.安装ImageMagick但是在切换到它之后花了很多痛苦(这是将'imagemagick'设置为Code Igniter图像处理类使用的库的问题,测试图像的结果如下:

在此输入图像描述

ImageMagick的调整大小正是按预期完成的.颜色被保留,清晰度就在那里.是的,我禁用了自定义锐化程序,因为ImageMagick不再需要它.最重要的是,这个过程更快,内存也更少.这里有另一个很大的部分:我无法解释它,但我绝对没有告诉ImageMagick使用特定的颜色配置文件,这是由用户@Alix建议的.到目前为止,在我的测试中,无论是否有嵌入的配置文件,都可以看到颜色信息.输出只是输入的较小版本.ImageMagick真的那么聪明还是我在做梦?

php codeigniter gd2 image-resizing

34
推荐指数
3
解决办法
1万
查看次数

在Imagick for PHP中透明到白色

我有一个透明背景的png图像,我想将其转换为具有白色背景的jpg图像.

代码基本上是这样的:

$image = new Imagick('transparent.png');
$image->writeImage('opaque.jpg');
Run Code Online (Sandbox Code Playgroud)

但这会产生黑色背景jpg.我一直在努力寻找将透明转换为白色无效的最糟糕的文档.

编辑:嗯,我尝试了Marc B的想法并且有点工作.

$image = new Imagick('transparent.png');
$white = new Imagick();

$white->newImage($image->getImageWidth(), $image->getImageHeight(), "white");
$white->compositeimage($image, Imagick::COMPOSITE_OVER, 0, 0);
$white->writeImage('opaque.jpg');

$image->destroy();
$white->destroy();
Run Code Online (Sandbox Code Playgroud)

现在的问题是,它总是导致脚本出现段错误.

php imagick

19
推荐指数
4
解决办法
1万
查看次数

ImageMagick PNG调整大小增加文件大小

我正在使用ImageMagick调整图像大小.如果我传递-resize WxH选项,它的行为与预期一致.但如果我通过-resize WxH!(为了在调整大小期间忽略宽高比),某些图像(尤其是PNG)的大小实际上在增加.200k图像变为450k,170k图像变为360k,依此类推.

任何想法为什么这是hapenning以及如何解决它?

谢谢

png imagemagick

7
推荐指数
1
解决办法
3345
查看次数

PHP/GD ImageSaveAlpha和ImageAlphaBlending

我正在使用GD来调整大小和转换图像,但是在我的测试中,我发现将透明PNG转换为JPEG时有一种奇怪的行为.根据手册ImageAlphaBlending()默认打开,但为了保持透明度,我必须将ImageSaveAlpha()设置为true(这反过来要求我将ImageAlphaBlending()设置为false).所以正确的方法应该是:

$result = ImageCreateFromPNG(...);
ImageAlphaBlending($result, false);
ImageSaveAlpha($result, true);
ImageFill($result, 0, 0, IMG_COLOR_TRANSPARENT);
ImageJPEG($result);
ImageDestroy($result);
Run Code Online (Sandbox Code Playgroud)

但是,如果我以"正确"方式执行此操作,则JPEG中的所有透明区域都会显示为黑色.这似乎在我的测试中起作用(透明区域上带有白色背景的JPEG):

$result = ImageCreateFromPNG(...);
ImageAlphaBlending($result, true); // true by default, but still...
ImageSaveAlpha($result, true);
ImageFill($result, 0, 0, IMG_COLOR_TRANSPARENT);
ImageJPEG($result);
ImageDestroy($result);
Run Code Online (Sandbox Code Playgroud)

有人可以请教我这个问题吗?

php png transparency gd image

4
推荐指数
1
解决办法
8900
查看次数

标签 统计

php ×3

png ×2

codeigniter ×1

gd ×1

gd2 ×1

image ×1

image-resizing ×1

imagemagick ×1

imagick ×1

transparency ×1