如何使用GD检查图像是否具有透明度

如何使用GD检查图像是否具有透明度

本文介绍了如何使用GD检查图像是否具有透明度?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用php的GD库检查图像是否有透明像素?

How do I check if an image has transparent pixels with php's GD library?

推荐答案

它看起来不像你可以一目了然地检测透明度。

It doesn't look like you can detect transparency at a glance.

上的注释表明,使用真彩色图像时得到的整数实际上可以总共移动四次,第四个是alpha通道(其他三个是红色,绿色和蓝色)。因此,给定 $ x $ y 的任何像素位置,您可以使用以下方法检测alpha:

The comments on the imagecolorat manual page suggest that the resulting integer when working with a true-color image can actually be shifted four times total, with the fourth being the alpha channel (the other three being red, green and blue). Therefore, given any pixel location at $x and $y, you can detect alpha using:

$rgba = imagecolorat($im,$x,$y);
$alpha = ($rgba & 0x7F000000) >> 24;
$red = ($rgba & 0xFF0000) >> 16;
$green = ($rgba & 0x00FF00) >> 8;
$blue = ($rgba & 0x0000FF);

一个 $ alpha 127显然是完全的透明,而零是完全不透明的。

An $alpha of 127 is apparently completely transparent, while zero is completely opaque.

不幸的是,你可能需要在图像中处理每个像素,只是为了找到一个透明的,然后这只适用于真彩色图像。否则 imagecolorat 会返回一个颜色索引,然后您必须使用,它实际上返回一个带有alpha值的数组。

Unfortunately you might need to process every single pixel in the image just to find one that is transparent, and then this only works with true-color images. Otherwise imagecolorat returns a color index, which you must then look up using imagecolorsforindex, which actually returns an array with an alpha value.

这篇关于如何使用GD检查图像是否具有透明度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-06 00:18