php的GD库提供了很多基础图片操作功能,可以分为两大类:

真彩图操作:支持直接透明图片处理,但不支持颜色变换,允许画入新内容。

调色板图操作:支持指定颜色为透明,并且支持颜色变换,允许画入新内容。

两种类型的图片可以相互转换,如果原图片有透明块尽可能避免直接转为调色板图(透明块容易出现未知异常)但可以合并到调色板图中从而保留了原图的透明,如果在调色板图中指定了某个色值为透明则在生成图片后这个色值为透明的。

如果只使用GD库在不需要变换图片颜色的时候基本上不需要使用调色板,相反需要有变换图片颜色时则只能使用调色板。

这里以生成小怪物为目标来操作变换小怪物的颜色:

首先需要准备5个基本图片元素:

图片要求:

所有图片最好全新画的(最好使用矢量图生成的)。

eyes.png 除了眼睛体外全部透明化处理。

fleck.png 除了斑纹休外全部透明化处理。

mouth.png 除了嘴巴体外全部透明化处理。

shadow.png 体型内无颜色透明化处理,体型外全部使用白色。

shape.png 不要有透明内容。

所有需要替换颜色的色值在其它所所部位最好都不要出现。

下面给一个生成不同颜色宠物的示例代码:

$image = imagecreatefrompng(‘shape.png‘); //取体型图片

list($src_w, $src_h) = getimagesize(‘shape.png‘); //获取宽高度

imagetruecolortopalette($image, false, 256); //转换为调色板图像

$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)); //修改颜色

// 这段处理非常重要,如果直接转换为真彩图会造成后续图片合并异常

$_image = imagecreatetruecolor($src_w, $src_h); //创建真彩图

$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); //合并

$color_index = imagecolorat($image, 385, 925); //获取颜色索引值(斑纹颜色)

imagecolorset($image, $color_index, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); //修改颜色

/* 体型阴影处理 */

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‘); //取斑纹图片

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)); //修改颜色

//添加背景

$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 通道信息

header(‘Content-type:image/png‘);

imagepng($image, null, 9);

imagedestroy($image);

注意: 替换图片颜色时需要取出调色板颜色的索引值函数 imagecolorat 就是取颜色的索引值(想获取哪个颜色给出颜色的任意坐标值即可),由于我测试时图片1304 X 1412 所以代码中坐标值都比较大。

执行结果如下:

php使用gd库合并图片,php使用GD库合并简单图片并变动部分颜色相关推荐

  1. python pillow库画图_python几种柱状图画法以及简单图片处理pillow库的学习

    之前说要插播一期画图心得,所以本期就介绍一下一些常见图的画法-为了get文末gif的合成和倒放的小彩蛋,还简单学了一个关于处理图片的库" [emmmmm,比如这样.......] 01 - ...

  2. PHP生产一个验证码图片,PHP使用GD库生成验证码图片,实现图片验证

    本文记录从php 下载配置GD图片生成库 到使用该库生成验证码图片,网页上实现验证码. 使用技术: php使用GD库绘图 [php版本7.3] php session 缓存 实现最终效果: 一. 配置 ...

  3. PHP图片融合处理,PHP极其强大的图片处理库Grafika详细教程(1):图像基本处理...

    Grafika是一个PHP图像处理库,是基于Imagick和GD,可以用于改变图片大小,剪裁,比较,添加水印等等功能.还有感知哈希,高级图像过滤,绘制贝塞尔曲线等功能,可谓非常强大. 由于功能太多,所 ...

  4. android picasso源码下载,Picasso:一个专为Android制作的强大的图片下载和缓存库

    Picasso:一个专为Android打造的强大的图片下载和缓存库 简介 在Android应用中,图片消费了大量的资源,却为应用提供了很好的视觉体验.幸运的是,Picasso为你的应用提供了非常容易的 ...

  5. php gd 行间距设置,PHP动态修改GD库扩展问题

    编译PHP不带gd,后续添加gd模块 在生成图像验证码的时候我们会用到GD库进行images,我们先安装它. 但是有时候,发现自己已经安装了GD库,但是验证码还是生成不了 这个时候就得检查一下imag ...

  6. Python学习笔记:使用PIL批量合成jpg+png图片,用于水印、合并图片,生成YOLO数据集+标注数据等等

    [Python学习笔记] 使用PIL,批量合成jpg+png图片,用于水印.合并图片,生成YOLO数据集+标注数据等等 起因:在了解很多关于YOLOv5的相关内容,于是尝试着去训练自己的游戏目标检测模 ...

  7. docker php安装gd扩展_docker php 容器安装GD库

    用thinkphp 5 Image库,创建缩略图报错:Call to undefined function imagecreatefromjpeg(),度娘一下发现是php 环境没有配置GD库扩展,因 ...

  8. php gd扩展库,linux/windows安装php-gd扩展库

    linux系统篇 1.CentOS系统 关于GD扩展 gd扩展是一个开源的图像处理库,它通过提供一系列用来处理图片的API,使其可以用来创建图表.图形.缩略图以及其他图像的处理操作.gd扩展支持JPG ...

  9. CV:基于face库利用cv2调用摄像头(或视频)根据人脸图片实现找人(先指定要识别已知人脸的文件夹转为numpy_array+输入新图片遍历已有numpy_array)

    CV:基于face库利用cv2调用摄像头(或视频)根据人脸图片实现找人(先指定要识别已知人脸的文件夹转为numpy_array+输入新图片遍历已有numpy_array) 目录 输出结果 设计思路 核 ...

  10. python图片解析库_python用来获得图片exif信息的库实例分析

    本文实例讲述了python用来获得图片exif信息的库用法.分享给大家供大家参考.具体分析如下: exif-py是一个纯python实现的获取图片元数据的python库,官方下载地址: http:// ...

最新文章

  1. 双一流高校通知「19级硕士秋季学期不开学!」决定引热议,你怎么看?
  2. osg 改变模型贴图
  3. 白话Elasticsearch12-深度探秘搜索技术之基于multi_match + best fields语法实现dis_max+tie_breaker
  4. 数据存储之 SQLite 数据库操作(一)
  5. Performance Tuning
  6. shall 基本语法
  7. 唐平中讲座笔记 Reinforcement mechanism design 20171107
  8. 详解程序员如何备战金三银四跳槽季
  9. ERROR: Cannot uninstall ‘wrapt‘. It is a distutils installed project and thus we cannot accurately..
  10. python循环5次_python基础-循环语句(5)
  11. 雷总:我也想做高级工程师 !
  12. 支付宝手机网页唤醒app支付
  13. 当年明月 Vs. 阎崇年
  14. 一个悲观主义者的积极思考——职业篇[待续2021/06/27]
  15. 傲慢的上校的fragment讲解
  16. VUE三目运算使用 :style与:class
  17. linux驱动tft屏幕,Linux2.6.26.5加入TFT-LCD驱动
  18. js点击事件在苹果ios端失效的解决方法
  19. mysql is双竖线_MySQL 5.0 新特性教程 存储过程:第二讲
  20. 李国庆离开当当再创业 春节前五天办完交接

热门文章

  1. Firefox定位网页元素工具
  2. 冲激脉冲抽样定理matlab,信号抽样及抽样定理分析.doc
  3. Cts框架解析(19)-设备状态的分类以及恢复模式的分类
  4. 空间点到空间直线的垂点计算
  5. 555定时器应用之--多谐振荡器
  6. ps蒙版使用计算机一级,photoshop基础教程当中的快速蒙版的使用方法
  7. 【转】加班与加薪的秘密:一位华为工程师的经验分享
  8. 金蝶K3WISE 销售订单序时簿即时库存的开发
  9. 英文情景对话(背诵篇)
  10. 阿里云服务器购买价格表:国内和国外地域云服务器活动报价表