根據公式:灰度值為red * 0.228 + green * 0.587 + blue * 0.114
首先獲得一個圖片當中所有的顏色數目,然后依次遍歷所有的顏色值,將其轉成灰度值即可。
$im = imagecreatefromjpeg('/home/istrone/aa.jpg');//如果是Gif用imagecreatefromgif,PNG用imagecreatefrompng……
if (imageistruecolor($im)) {
imagetruecolortopalette($im, false, 256);//如果是真彩色圖象,將真彩色圖像轉換為調色板圖像
}
for ($i = 0; $i < imagecolorstotal($im);/*獲得調色板中顏色的數目*/ $i++){
$rgb = imagecolorsforindex($im, $i);//獲得顏色i點的顏色值
$gray = round(0.229 * $rgb['red'] + 0.587 * $rgb['green'] + 0.114 * $rgb['blue']);//獲得顏色灰度值
imagecolorset($im, $i, $gray, $gray, $gray);//設置i點顏色值
}
header('Content-Type: image/jpeg');//設置圖片類型,同樣如果想生成gif或者png圖象,要替換成相應的頭
imagejpeg($im);//輸出圖象,如果是gif就用imagegif,如果是png就用imagepng……
imagedestroy($im);//銷毀圖象,釋放資源
轉成黑白圖也比較簡單,只需要判斷得到的灰度值,如果<128,那么置為0,否則,設置為255
代碼如下:
$im = imagecreatefromjpeg(‘/home/istrone/aa.jpg’);//如果是Gif用imagecreatefromgif,PNG用imagecreatefrompng……
if (imageistruecolor($im)) {
imagetruecolortopalette($im, false, 256);//如果是真彩色圖象,將真彩色圖像轉換為調色板圖像
}
for ($i = 0; $i < imagecolorstotal($im);/*獲得調色板中顏色的數目*/ $i++){
$rgb = imagecolorsforindex($im, $i);//獲得顏色i點的顏色值
$gray = round(0.229 * $rgb['red'] + 0.587 * $rgb['green'] + 0.114 * $rgb['blue']);//獲得顏色灰度值
if($gray <= 128) $gray = 0; else $gray = 255;
imagecolorset($im, $i, $gray, $gray, $gray);//設置i點顏色值
}
header(‘Content-Type: image/jpeg’);//設置圖片類型,同樣如果想生成gif或者png圖象,要替換成相應的頭
imagejpeg($im);//輸出圖象,如果是gif就用imagegif,如果是png就用imagepng……
imagedestroy($im);//銷毀圖象,釋放資源
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答