我想以一种简单的方式制作一个带有透明背景的纯色徽标,因此我决定采用第一个像素并将所有图像上的颜色设置为透明,我知道这不是所有人的最佳解决方案,但我认为涵盖在大多数情况下。
问题是它着色黑色的像素是透明的,这是我的代码:
$im = $this->loadImage($targetFile);
$this->replaceImageColor($im, imagecolorat($im, 0, 0), imageColorAllocateAlpha($im, 255, 255, 255, 127));
imagepng($im, 'test.png');
我的班级职能:
function loadImage($imagePath) {
$resource = false;
if( strstr($imagePath, '.jpg') || strstr($imagePath, '.jpeg') )
$resource = @imagecreatefromjpg($imagePath);
if( strstr($imagePath, '.png') )
$resource = @imagecreatefrompng($imagePath);
return $resource;
}
function replaceImageColor($img, $from, $to) {
// pixel by pixel grid.
for ($y = 0; $y < imagesy($img); $y++) {
for ($x = 0; $x < imagesx($img); $x++) {
// find hex at x,y
$at = imagecolorat($img, $x, $y);
// set $from to $to if hex matches.
if ($at == $from)
imagesetpixel($img, $x, $y, $to);
}
}
}