[英]Problem resizing PNG and placing it over larger transparent background in PHP/GD?
因此,一切正常。 我已經調整了源PNG的大小,並正確地將其放置在創建的背景上,但是PNG之外的其他區域變為黑色。 我已經通過使用imagecolortransparent使它變得透明,但這會使png邊緣變得鋸齒狀。
這就是我目前在PNG周圍制作黑條的內容。 請記住,我只在這里處理PNG圖片。
// TARGET IMAGE
$target = imagecreatetruecolor($this->request['width'], $this->request['height']);
imagealphablending($target, false);
imagesavealpha($target, true);
// SOURCE IMAGE
$source = imagecreatefrompng($this->src_image);
// RESAMPLING
imagecopyresampled($target, $source, $offsetX, $offsetY, 0, 0, $tnWidth, $tnHeight, $this->src_width, $this->src_height);
// FINAL IMAGE
imagepng($target, $source, $quality);
// MEMORY CLEAN UP
imagedestroy($source);
imagedestroy($target);
// PRODUCES SOMETHING LIKE THIS
+--------------------------------+
| BLACK AREA |
+--------------------------------+
| |
| RESIZED PNG |
| WITH TRANSPARENCY |
| |
+--------------------------------+
| BLACK AREA |
+--------------------------------+
// WHERE IT SHOULD HAVE THE BLACK AREAS TRANSPARENT AS WELL
+--------------------------------+
| TRANSPARENT |
+--------------------------------+
| |
| RESIZED PNG |
| WITH TRANSPARENCY |
| |
+--------------------------------+
| TRANSPARENT |
+--------------------------------+
希望有人對此有所了解,因為我在網上發現的所有示例都只涉及在相同大小的透明BG上調整PNG的大小,這很容易。
TIA
好了,幾個小時后就知道了。 因此,我希望這對其他人有幫助。
// SOURCE PNG
$src = imagecreatefrompng($this->src_image);
// DESTINATION CANVAS
$dst = imagecreatetruecolor($canvasW, $canvasH);
imagealphablending($dst, false);
$color = imagecolorallocatealpha($dst, 0, 0, 0, 127);
imagefill($dst, 0, 0, $color);
imagesavealpha($dst, true);
// RESAMPLE/RESIZE SOURCE AND TARGET TOGETHER
imagecopyresampled($dst, $src, $offsetX, $offsetY, 0, 0, $tnWidth, $tnHeight, $this->src_width, $this->src_height);
// WRITE FILE
imagepng($dst, $resized, $quality);
// MEMORY CLEAN UP
imagedestroy($src);
imagedestroy($dst);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.