我正在使用imagecopy將PNG圖像裁剪爲用戶規格。如何在PHP中使用imagecopy時使任何「額外空間」爲白色
目前,如果作物面積大於圖像,任何「額外空間」都會變黑,但我希望它是白色的。
已經搜索了一堆,我發現你可以使用imagefill或imagefilledrectangle使背景變成白色,但是如果這是在imagecopy之前完成的,那麼它不起作用,如果它在imagecopy之後完成,它也會使圖像中的任何黑色部分都是白色的。
我的代碼目前看起來像這一點,並從原始圖像的黑色部分受到影響而變成了白色,以及額外的空間:
// Input and output files
$infile = "[Image]";
$outfile = "[Output path for image]"
// Make the image
$orig =imagecreatefromjpeg($infile);
$width = imagesx($orig);
$height = imagesy($orig);
$new = imagecreatetruecolor($width, $height);
// Crop the image
imagecopy($new, $orig, 0, 0, -100, 100, $width, $height);
// Try and make the extra space white
$white = imagecolorallocate($new, 255,255,255);
imagefill($new, 0, 0, $white);
// Save the file
imagepng($new, $outfile);
我怎樣才能讓多餘的空間白色,而不會影響原來的形象呢?我無法控制用戶可能上傳的圖片,因此我無法選擇透明顏色,因爲該顏色可能是其原始圖片的一部分。
編輯:當用戶在原始圖像尺寸之外選擇剪裁尺寸時,會出現此方案,這是我確實希望成爲有效選項的東西。作物是強制一個正方形的圖像,但如果用戶上傳,例如,一個橫向矩形,並希望在最終作物中的所有圖像,那麼作物將在圖像的頂部和底部之外(這是我希望它是白色而不是黑色)
示例代碼被簡化了,但基本上用戶可以縮小和裁剪圖像邊界以外的圖像,我確實希望這是一個有效的選項。作物是強制正方形,但如果用戶的圖像是橫向矩形,並且他們希望所有原始圖像都位於最終輸出中,則裁切尺寸將位於頂部和底部原始圖像之外。希望是有道理的! –
好的,我認爲這個解釋填補了我理解的空白。我會看看我是否可以修改上述內容。 – timclutton