欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

php怎么合并圖片并變動部分顏色

本篇內(nèi)容主要講解“php怎么合并圖片并變動部分顏色”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“php怎么合并圖片并變動部分顏色”吧!

創(chuàng)新互聯(lián)公司是一家專業(yè)從事網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站的網(wǎng)絡(luò)公司。作為專業(yè)的建站公司,創(chuàng)新互聯(lián)公司依托的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營經(jīng)驗(yàn),為您提供專業(yè)的成都網(wǎng)站建設(shè)、成都全網(wǎng)營銷推廣及網(wǎng)站設(shè)計(jì)開發(fā)服務(wù)!

php的GD庫提供了很多基礎(chǔ)圖片操作功能,可以分為兩大類:

真彩圖操作:支持直接透明圖片處理,但不支持顏色變換,允許畫入新內(nèi)容。
調(diào)色板圖操作:支持指定顏色為透明,并且支持顏色變換,允許畫入新內(nèi)容。

兩種類型的圖片可以相互轉(zhuǎn)換,如果原圖片有透明塊盡可能避免直接轉(zhuǎn)為調(diào)色板圖(透明塊容易出現(xiàn)未知異常)但可以合并到調(diào)色板圖中從而保留了原圖的透明,如果在調(diào)色板圖中指定了某個(gè)色值為透明則在生成圖片后這個(gè)色值為透明的。

如果只使用GD庫在不需要變換圖片顏色的時(shí)候基本上不需要使用調(diào)色板,相反需要有變換圖片顏色時(shí)則只能使用調(diào)色板。

這里以生成小怪物為目標(biāo)來操作變換小怪物的顏色:

首先需要準(zhǔn)備5個(gè)基本圖片元素:

php怎么合并圖片并變動部分顏色

圖片要求:

  1. 所有圖片最好全新畫的(最好使用矢量圖生成的),所有需要變色的原顏色與其它顏色連接處不能有過渡,否則替換顏色后原連接過渡顏色將被保留,影響美觀。

  2. eyes.png 除了眼睛體外全部透明化處理。

  3. fleck.png 除了斑紋休外全部透明化處理。

  4. mouth.png 除了嘴巴體外全部透明化處理。

  5. shadow.png 體型內(nèi)無顏色透明化處理,體型外全部使用白色。

  6. shape.png 不要有透明內(nèi)容。

  7. 所有需要替換顏色的色值在其它所所部位最好都不要出現(xiàn)。

下面給一個(gè)生成不同顏色寵物的示例代碼:

    $image = imagecreatefrompng('shape.png'); //取體型圖片
    list($src_w, $src_h) = getimagesize('shape.png'); //獲取寬高度
    imagetruecolortopalette($image, false, 256); //轉(zhuǎn)換為調(diào)色板圖像,只有調(diào)色板才能換顏色
    $color_index = imagecolorat($image, 276, 621); //獲取顏色索引值(體型顏色)
    imagecolorset($image, $color_index, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); //修改顏色
    $color_index = imagecolorat($image, 450, 780); //獲取顏色索引值(肚皮顏色)
    imagecolorset($image, $color_index, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); //修改顏色

        // 這段處理非常重要,如果直接轉(zhuǎn)換為真彩圖會造成后續(xù)有透明圖片合并異常
        // 如果直接使用 **imagepalettetotruecolor**  函數(shù)也會有異常,可能是調(diào)色板數(shù)據(jù)未清除造成的
        // 如同把圖片寫到文件再讀取一樣,得到真彩圖
    $_image = imagecreatetruecolor($src_w, $src_h); //創(chuàng)建真彩圖
    $color = imagecolorallocate($_image, 255, 255, 255); //分配顏色
    imagefill($_image, 0, 0, $color); //填充
    imagecopyresampled($_image, $image, 0, 0, 0, 0, $src_w, $src_h, $src_w, $src_h); //合并修改后的圖片
    $image = $_image;

    /* 斑紋處理 */
    $image_fleck = imagecreatefrompng('fleck.png'); //取斑紋圖片
    imagecopyresampled($image, $image_fleck, 0, 0, 0, 0, $src_w, $src_h, $src_w, $src_h); //合并
        imagetruecolortopalette($image, false, 256); //轉(zhuǎn)換為調(diào)色板圖像,只有調(diào)色板才能換顏色
    $color_index = imagecolorat($image, 385, 925); //獲取顏色索引值(斑紋顏色)
    imagecolorset($image, $color_index, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); //修改顏色

        // 如同把圖片寫到文件再讀取一樣,得到真彩圖,與上面一樣,如果不這樣處理后續(xù)的透明圖合并將會有異常
    $_image = imagecreatetruecolor($src_w, $src_h); //創(chuàng)建真彩圖
    $color = imagecolorallocate($_image, 255, 255, 255); //分配顏色
    imagefill($_image, 0, 0, $color); //填充
    imagecopyresampled($_image, $image, 0, 0, 0, 0, $src_w, $src_h, $src_w, $src_h); //合并修改后的圖片
    $image = $_image;

    /* 體型陰影處理 */
    imagecopyresampled($image, imagecreatefrompng('test1/shadow.png'), 0, 0, 0, 0, $src_w, $src_h, $src_w, $src_h);

    /* 嘴巴處理 */
    imagecopyresampled($image, imagecreatefrompng('test1/mouth.png'), 0, 0, 0, 0, $src_w, $src_h, $src_w, $src_h);

    /* 眼睛處理 */
    $image_eyes = imagecreatefrompng('eyes.png'); //取斑紋圖片
        imagetruecolortopalette($image, false, 256); //轉(zhuǎn)換為調(diào)色板圖像,只有調(diào)色板才能換顏色
    imagecopyresampled($image, $image_eyes, 0, 0, 0, 0, $src_w, $src_h, $src_w, $src_h); //合并
    $color_index = imagecolorat($image_eyes, 285, 335); //獲取顏色索引值(眼睛顏色)
    imagecolorset($image, $color_index, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); //修改顏色

        // 如同把圖片寫到文件再讀取一樣,得到真彩圖,與上面一樣,如果不這樣處理后續(xù)的透明圖合并將會有異常
    $_image = imagecreatetruecolor($src_w, $src_h); //創(chuàng)建真彩圖
    $color = imagecolorallocate($_image, 255, 255, 255); //分配顏色
    imagefill($_image, 0, 0, $color); //填充
    imagecopyresampled($_image, $image, 0, 0, 0, 0, $src_w, $src_h, $src_w, $src_h); //合并修改后的圖片
    $image = $_image;

    //添加背景
    $color_index = imagecolorat($image, 435, 300); //獲取顏色索引值(背景顏色)
    imagefilltoborder($image, 0, 0, $color_index, imagecolorallocate($image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)));
    imagesavealpha($image, true); //保存 alpha 通道信息,如果圖片中有透明內(nèi)容則需要

    header('Content-type:image/png');
    imagepng($image, null, 9);
    imagedestroy($image);

注意:替換圖片顏色時(shí)需要取出調(diào)色板顏色的索引值函數(shù) imagecolorat就是取顏色的索引值(想獲取哪個(gè)顏色給出顏色的任意坐標(biāo)值即可),由于我測試時(shí)圖片1304 X 1412 所以代碼中坐標(biāo)值都比較大,還有顏色替換會有鋸齒這是因?yàn)橄袼攸c(diǎn)為矩形造成的當(dāng)圖片有一定大小時(shí)不會影響太多美觀。

執(zhí)行結(jié)果如下:

php怎么合并圖片并變動部分顏色

到此,相信大家對“php怎么合并圖片并變動部分顏色”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)站題目:php怎么合并圖片并變動部分顏色
網(wǎng)址分享:http://chinadenli.net/article12/ggjjgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航網(wǎng)站設(shè)計(jì)公司網(wǎng)站排名App開發(fā)網(wǎng)站設(shè)計(jì)網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化