Php 操纵透明PNG会使图像中的所有rgb(0,0,0)变为透明
我有一个PHP图像上传系统,允许用户上传各种图像(JPG、GIF、PNG)。上传的每个图像都有一个图标(20x20)、缩略图(150x150)和一张明信片(500x500),我称之为“元图像”。如果原始图像的尺寸不像元图像那样是方形的,则会将其缩放到最佳匹配,并以适当的尺寸生成透明画布,并将元图像放置在其上。由于这种透明的拉票,以及出于其他目的,所有生成的元图像本身都是PNG(无论原始图像格式如何) 例如,如果用户上载800px x 600px的JPG映像,则文件系统中会出现以下情况:Php 操纵透明PNG会使图像中的所有rgb(0,0,0)变为透明,php,image-processing,png,transparency,gd,Php,Image Processing,Png,Transparency,Gd,我有一个PHP图像上传系统,允许用户上传各种图像(JPG、GIF、PNG)。上传的每个图像都有一个图标(20x20)、缩略图(150x150)和一张明信片(500x500),我称之为“元图像”。如果原始图像的尺寸不像元图像那样是方形的,则会将其缩放到最佳匹配,并以适当的尺寸生成透明画布,并将元图像放置在其上。由于这种透明的拉票,以及出于其他目的,所有生成的元图像本身都是PNG(无论原始图像格式如何) 例如,如果用户上载800px x 600px的JPG映像,则文件系统中会出现以下情况: 800
Jim您明确指定0,0,0是透明的:
$oTransparentColor = imagecolorallocatealpha( $this->oTransparentCanvas, 0, 0, 0, 127 );
这将适用于图像中颜色三元组为0,0,0的任何像素-换句话说,所有黑色,正如您所发现的
如果您希望原始图像通过,您可以转换为使用alpha通道。它将是图像中一个单独的“层”,专门指定每个像素的透明度/不透明性。或者扫描原始图像中未使用的颜色,然后将其指定为新的透明值,而不是默认为0,0,0。是的,我可能提供了过多的颜色,但我指定了我认为存在问题的特定区域。至少你不用问我密码。。。也就是说,这只是一个345行的文件,其中大部分是评论和文档。你的建议已经过时了,这是我以前读过的东西。我只是不知道怎么做。然而,你让我重新关注我的谷歌搜索,我发现了一些有用的东西。我在前面提到的
createTarget()
中留下了大量行,但我在它们之后添加了一个检查,以查看它是否是PNG。如果是,我也会调用imagesavealpha($this->oTargetImage,true)代码>我在最后的评论中粗鲁地忘了提到它——谢谢你的时间和帮助。:)
<?php
ObjectImageRenderer::batchRender( $sSourceFile );
$aTransparentTypes = Array( 'gif', 'png', 'x-png' );
if( in_array( $this->sSourceExt, $aTransparentTypes ) )
{
$oTransparentColor = imagecolorallocate( $this->oTargetImage, 0, 0, 0 );
imagecolortransparent( $this->oTargetImage, $oTransparentColor);
imagealphablending( $this->oTargetImage, false );
}
$oTransparentColor = imagecolorallocatealpha( $this->oTransparentCanvas, 0, 0, 0, 127 );