簡體   English   中英

調整PNG大小並將其放置在PHP / GD中更大的透明背景上時遇到問題嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM