緣起
開發(fā)"微信推廣海報"的時, 背景圖片未覆蓋的地方默認(rèn)會被黑色填充. 而我希望改成白色背景, 以對用戶更友好一些. 但是無論設(shè)置成什么顏色, 圖片的背景顏色一直都是黑色, 無法改變. 當(dāng)時的代碼如下:
$target = imagecreatetruecolor(640, 1008);
$background = imagecolorallocate($target, 255, 255, 255); //計(jì)劃改成白色背景, 但是沒有奏效
解決
修改背景顏色有 2 種方法:
- 如果希望生成的圖片是全彩色的, 使用
imagecreatetruecolor()
函數(shù), 配合設(shè)置顏色的imagecolorallocate()
函數(shù), 以及填充顏色的imagefill()
函數(shù); - 如果允許生成的圖片是 256 色的, 可以使用
imagecreate()
函數(shù), 配合imagecolorallocate()
函數(shù);
00. 基礎(chǔ)
首先, 在圖像中使用的任何顏色都必須用 imagecolorallocate()
函數(shù)來生成:
imagecolorallocate ( $image , $red , $green , $blue )
01. 全彩色的 imagecreatetruecolor 方案
如果使用 imagecreatetruecolor()
函數(shù), 除了設(shè)置顏色的 imagecolorallocate()
, 還需要配合 imagefill()
函數(shù):
imagecreatetruecolor ( $width , $height )
imagefill ( $image , $x , $y , $color )
比如, 設(shè)置"白色"的背景圖 (RGB 值是 "255, 255, 255"):
$image = imagecreatetruecolor(640, 1008);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image,0,0,$white); //這里的 "0, 0"是指坐標(biāo), 使用體驗(yàn)就類似 Windows 系統(tǒng)"畫圖"軟件的"顏料桶", 點(diǎn)一下之后, 在整個封閉區(qū)間內(nèi)填充顏色
02. 非全彩色的 imagecreate 方案
如果對圖片的顏色要求不高, 可以接受 256 色, 則可以使用這個方案.
imagecreate ( $width , $height )
使用 imagecreate()
函數(shù)時, 用 imagecolorallocate()
函數(shù)設(shè)置的第 1 個顏色將默認(rèn)成為背景顏色.
比如, 設(shè)置"灰色"的背景圖:
$image = imagecreate(640, 1008);
$gray = imagecolorallocate($image, 235, 235, 235); //用 imagecolorallocate 函數(shù)設(shè)置的第 1 個顏色將自動成為背景顏色
再次提醒:
基于 imagecreate()
生成的圖片是 256 色, 并不是全彩色, 也就是說顏色會失真, 所以推薦使用上面的第一種方案 -- 全彩色的 imagecreatetruecolor()
方案.
題外 -- 用 GD 庫創(chuàng)建圖片的基本步驟
//第 1 步: 創(chuàng)建畫布
$image = imagecreatetruecolor(640, 1008); //指定畫布尺寸
//第 2 步: 創(chuàng)建顏色
$white = imagecolorallocate($image, 255, 255, 255); //創(chuàng)建顏色
$black = imagecolorallocate($image, 0, 0, 0); //創(chuàng)建顏色
imagefill($image,0,0,$white); //自定義畫布的背景顏色
//第 3 步: 繪制圖形
imagefilledrectangle($image, 50, 50, 150, 150, $black);
//第 4 步: 輸出圖片
header("Content-Type: image/png"); //需要將圖片發(fā)送到瀏覽器
imagepng($image, $path); //輸出圖片到 $path 的位置. $path 包括圖片的名稱
imagedestroy($image); //釋放內(nèi)存
參考文章
- php圖像函數(shù) imagecreatetruecolor()和imagecreate()的區(qū)別
- Kevin Tatroe 等. PHP 編程: 第 3 版. 北京:電子工業(yè)出版社. 2015.3
- 解決php gd函數(shù) ImageCreatetruecolor 做背景顏色只顯示黑色的問題 (注意, 這篇文章建議直接用 imagecreate 替代 imagecreatetruecolor, 但是忘記提醒 imagecreate 的顏色失真問題)
文章歷史
- 2017/05/24 (第一次發(fā)布)
- 2017/06/03 修改
- 2017/06/13 修改; 增加 imagedestroy
如果我的文章對你有用, 希望給些改進(jìn)的建議, 或者打個"喜歡" _