若跌破該功能適用於大部分或根本沒有。我試圖通過像素循環並切換顏色,同時保持alpha。我認爲我一直在工作,直到我將頁面背景變成白色,並在圖標周圍看到一個小邊框。PHP GD - 顏色替換使用Alpha給圖像我不知道邊界
我認爲問題是,顏色被施加到半透明像素。因此,白色在圖像的消除鋸齒的部分上變成灰色。然後我決定在設置新顏色之前使像素完全透明。這沒有做什麼。
於是問題。爲什麼白色圖像有一個小邊框?
顏色轉換函數。
function updateThumb($image, $newColor) {
$img = imagecreatefrompng($image);
$w = imagesx($img);
$h = imagesy($img);
// Work through pixels
for($y=0;$y<$h;$y++) {
for($x=0;$x<$w;$x++) {
// Apply new color + Alpha
$rgb = imagecolorsforindex($img, imagecolorat($img, $x, $y));
$transparent = imagecolorallocatealpha($img, 0, 0, 0, 127);
imagesetpixel($img, $x, $y, $transparent);
$pixelColor = imagecolorallocatealpha($img, $newColor[0], $newColor[1], $newColor[2], $rgb['alpha']);
imagesetpixel ($img, $x, $y, $pixelColor);
}
}
// Restore Alpha
imageAlphaBlending($img, true);
imageSaveAlpha($img, true);
return $img;
}
大拇指需要一個翻轉效果,所以圖像是在下面的功能。我不認爲這與問題有關,我試圖改變上述功能來創建圖像,而不是返回它,併發生同樣的事情。
function makeThumb($path, $top, $bottom=FALSE) {
$width = imagesx($top);
$height = imagesy($top);
$thumbHeight = $bottom != FALSE ? $height * 2 : $height;
// Create Transparent PNG
$thumb = imagecreatetruecolor($width, $thumbHeight);
$transparent = imagecolorallocatealpha($thumb, 0, 0, 0, 127);
imagefill($thumb, 0, 0, $transparent);
// Copy Top Image
imagecopy($thumb, $top, 0, 0, 0, 0, $width, $height);
// Copy Bottom Image
if ($bottom != FALSE) {
imagecopy($thumb, $bottom, 0, $height, 0, 0, $width, $height);
}
// Save Image with Alpha
imageAlphaBlending($thumb, true);
imageSaveAlpha($thumb, true);
imagepng($thumb, $path); // save image as gif
}
函數被稱爲像這樣...
$thumbTop = updateThumb('Path/To/Thumb', array(255,255,255));
makeThumb('output/path', $thumbTop);
這是圖標:http://img171.imageshack.us/i/iconkc.png/
任何想法?
直到我找到這個,我一直在努力解決同樣的問題。謝謝! – 2017-09-29 10:43:02