能否检查PNG图像是否具有透明背景?

8

我正在使用一个图片裁剪和调整大小的功能,但是我需要让它仅裁剪/调整大小拥有透明背景的png文件。至少图片中的1个像素应为透明才能接受该图像。

是否可能检查PNG图像是否具有透明背景/像素?

我正在使用PHP和GD库。

编辑:好的,我已经找到了如何在PHP中使用GD库完成此操作。看起来多么简洁!:)

<?php

$im = imagecreatefrompng("php.png");
$rgba = imagecolorat($im,1,1);
$alpha = ($rgba & 0x7F000000) >> 24;

var_dump($alpha);
?>

有什么想法可以创建一个数组来检查所有图像像素,寻找至少1个像素 = $alpha = 127?


可以通过穷举检查等方式实现,但是否有特定的PNG框架或语言需要参考? - Tommy
逐像素检查会花费太多的处理时间吗?我会尝试一下。 - user1143241
那取决于图像的大小...通常,如果您处理许多大尺寸文件,则是的 - 处理时间将太长... - Michal B.
我已经想通了!只需要学习如何为图像上的每个像素创建一个数组或循环。你能帮忙吗? - user1143241
3个回答

3

1

你可以遍历所有像素,并检查它们中是否有任何一个 alpha 值不为 255。你使用的是哪种语言和库?


我正在使用GD和PHP/jQuery。有什么想法如何做到这一点? - user1143241
恐怕不行。我已经在Java和Python中完成了您要尝试的操作,但不太了解PHP。不过,我建议您搜索一下图像库并查看它们提供了什么。它们可能会有一个函数告诉您,或者您可以使用以下伪代码来解决问题:像素是否为32位?是==可能透明。(查找8位是否可能透明,24位则不是)。如果可能透明,请获取图像数据,循环遍历数据,检查每个像素是否透明。 - vextorspace
我知道,我也不是PHP专家,只是在学习。我找不到任何东西,我想GD库没有我需要的东西,我只找到了一些用于alpha或透明的函数,但对我来说都没用。也许我应该尝试用其他语言完成整个项目? :( 我会尝试使用imagecolorat函数,也许我可以从那个函数中得到一些帮助。 - user1143241
我已经想通了!只需要学习如何为图像上的每个像素设置一个数组或循环即可。 - user1143241

1
在Imagemagick中处理这个问题的一种方法是检查alpha通道的平均值。如果为1,则是不透明的。否则,alpha通道具有某些透明度或部分透明度。
convert logo: -channel a -separate -format "%[fx:mean]" info:
1

convert logo: -transparent white -format "%[fx:mean]" info:
0.894907


所以你可以做:

convert image -format "%[fx:mean==1?1:0]" info:

如果返回值为1,则完全不透明。如果返回值为0,则存在某些透明度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接