PHP:将 png 和 gif 转换为灰度
我使用以下脚本将 jpg 转换为灰度图像。 http://bubble.ro/How_to_convert_an_image_to_grayscale_using_PHP.html
我想升级它也可以转换 png(使用透明度)和 gif(具有透明度)转换为灰度图像。
目前它不起作用。我正在查询 image-src 的文件扩展名。如果 jpg、if、gif 或 if png,我会调用适当的 imagecreatefrom-jpg-gif-png
但是,我总是运行相同的 for 循环,不幸的是 gif 只得到灰色矩形,每个像素都是灰色的。 PNG 几乎可以工作,但是 png 中的透明度会变成黑色。
有什么想法吗?
im using the following script to convert jpgs into grayscale-images.
http://bubble.ro/How_to_convert_an_image_to_grayscale_using_PHP.html
i want to upgrade it to also convert pngs (with transparency) and gifs (with transparency) into grayscale images.
At the moment it's not working. I'm querying the image-src for its file-extension. If jpg, if, gif, or if png i call the appropriate imagecreatefrom-jpg-gif-png
However i'm always running the same for-loop and gifs unfortunately only get gray rectangles, every pixel is gray. Png's almost work, however transprency in pngs gets transformed to black.
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(4)
要获得没有黑色背景的正确图片,您必须遵循策略:
首先创建新的图像项目
将其 alphablending 设置为 false
将其 savealpha 设置为 true
用透明矩形填充它
将您的灰色图片复制到上面,
您的代码将与此类似:
switch ($handle->file_src_name_ext) {
case 'gif':
$sourceIm = imagecreatefromgif($savepath.$handle->file_dst_name);
break;
case 'jpg':
$sourceIm = imagecreatefromjpeg($savepath.$handle->file_dst_name);
break;
case 'png':
default:
$sourceIm = imagecreatefrompng($savepath.$handle->file_dst_name);
break;
}
$iw = imagesx($sourceIm);
$ih = imagesy($sourceIm);
$im = imagecreatetruecolor($iw, $ih);
if (function_exists('imagecolorallocatealpha')) {
imagealphablending($im, false);
imagesavealpha($im, true);
$transparent = imagecolorallocatealpha($im, 255, 255, 255, 127);
imagefilledrectangle($im, 0, 0, $iw, $ih, $transparent);
}
if ($sourceIm ) {
imagefilter($sourceIm, IMG_FILTER_GRAYSCALE);
}
imagecopyresampled($im, $sourceIm, 0, 0, 0, 0, $iw, $ih, $iw, $ih);
switch ($handle->file_src_name_ext) {
case 'gif':
imagepng($im, $savepath.'grd'.$row->id.'.gif');
break;
case 'jpg':
imagejpeg($im, $savepath.'grd'.$row->id.'.jpg');
break;
case 'png':
default:
imagepng($im, $savepath.'grd'.$row->id.'.png');
break;
}
祝你好运!
看看我的 balda pomoshnik
谢谢你!
imagefilter($img, IMG_FILTER_GRAYSCALE);
它快要工作了。我仍然遇到透明度问题。具有透明背景的 png 会转换为黑色(背景为黑色)。同样的情况也发生在 gif 上,而且带有透明度的 gif 无法正确灰度化。有一些非常灰色调的颜色,但其中也有浅绿色调和红色调。
<?php
$src = $_GET['src'];
$img_ext;
if (preg_match('/\.(\w{3,4})$/i', $src, $reg)) {
$img_ext = strtolower($reg[1]);
}
$source_file = $src;
if ($img_ext == "jpg" || $img_ext == "jpeg") { //jpg
$im = imagecreatefromjpeg($source_file);
} else if ($img_ext == "gif") {
$im = imagecreatefromgif($source_file); //gif
} else if ($img_ext == "png") {
$im = imagecreatefrompng($source_file); //png
} else {
}
ImageFilter($im, IMG_FILTER_GRAYSCALE);
if ($img_ext == "jpg" || $img_ext == "jpeg") { //jpg
header('Content-type: image/jpeg');
imagejpeg($im);
} else if ($img_ext == "gif") { //gif
header('Content-type: image/gif');
imagegif($im);
} else if ($img_ext == "png") { //png
header('Content-type: image/png');
imagepng($im);
} else {
}
?>
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
使用这里找到的
http://hm2k.googlecode.com/svn/trunk/代码/php/functions/imagegray.php
Use this found here
http://hm2k.googlecode.com/svn/trunk/code/php/functions/imagegray.php