對,所以我開始在PHP中構建一個函數,它可以將兩個圖像合併在一起,同時保留PNG文件的透明背景 - 我成功完成 - 使用下面的代碼,imagecolortransparent()將所有黑色像素變成透明的PHP
function imageCreateTransparent($x, $y) {
$imageOut = imagecreatetruecolor($x, $y);
$colourBlack = imagecolorallocate($imageOut, 0, 0, 0);
imagecolortransparent($imageOut, $colourBlack);
return $imageOut;
}
function mergePreregWthQR($preRegDir, $qrDir){
$top_file = $preRegDir;
$bottom_file = $qrDir;
$top = imagecreatefrompng($top_file);
$bottom = imagecreatefrompng($bottom_file);
// get current width/height
list($top_width, $top_height) = getimagesize($top_file);
list($bottom_width, $bottom_height) = getimagesize($bottom_file);
// compute new width/height
$new_width = ($top_width > $bottom_width) ? $top_width : $bottom_width;
$new_height = $top_height + $bottom_height;
// create new image and merge
$new = imageCreateTransparent($new_width,$new_height);
imagecopy($new, $bottom, 0, $top_height+1, 0, 0, $bottom_width, $bottom_height);
imagecopy($new, $top, 0, 0, 0, 0, $top_width, $top_height);
$filename = "merged_file.png";
// save to file
imagepng($new, $filename);
}
mergePreregWthQR("file.png", "qr.png");
這設法合併兩個圖像,並保持透明的背景下,唯一的問題是,在合併後的圖像中的任何黑色像素變成透明的,這個合併的結果如下所示> merged image
頂部圖像是果皮下圖是QR碼,只有當圖像放置在除白色以外的任何背景上時才能看到。所以我很確定發生了什麼,是imagecolortransparent($ imageOut,$ colourBlack);將每黑色像素中新創建的merged_file.png設置爲透明。我通過改變imageCreateTransparent($ X,$ y)的輕微到什麼如下所示測試理論,
function imageCreateTransparent($x, $y) {
$imageOut = imagecreatetruecolor($x, $y);
$colourBlack = imagecolorallocate($imageOut, 55, 55, 55);
imagefill ($imageOut, 0, 0, $colourBlack);
imagecolortransparent($imageOut, $colourBlack);
return $imageOut;
}
所以在這個功能我用的顏色(55,55填充整個圖像,55),然後在我的imagecolortransparent()函數中將此顏色設置爲透明。這樣做的竅門,我的QR碼顯示爲它應該是。唯一的問題是,我認爲這是一個快速和骯髒的黑客,如果任何人有一個上傳的圖像中的顏色(55,55,55),它會變成透明的?所以我很想知道另一種解決方案是什麼?謝謝。
你有沒有解決這個問題?我有同樣的問題... – GhostCode 2014-02-06 05:24:34