返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php怎么合并图片并变动部分颜色
  • 232
分享到

php怎么合并图片并变动部分颜色

2024-04-02 19:04:59 232人浏览 八月长安
摘要

本篇内容主要讲解“PHP怎么合并图片并变动部分颜色”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php怎么合并图片并变动部分颜色”吧!php的GD库提供了很多基

本篇内容主要讲解“PHP怎么合并图片并变动部分颜色”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习php怎么合并图片并变动部分颜色”吧!

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

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

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

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

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

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

php怎么合并图片并变动部分颜色

图片要求:

  1. 所有图片最好全新画的(最好使用矢量图生成的),所有需要变色的原颜色与其它颜色连接处不能有过渡,否则替换颜色后原连接过渡颜色将被保留,影响美观。

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

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

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

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

  6. shape.png 不要有透明内容。

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

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

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

        // 这段处理非常重要,如果直接转换为真彩图会造成后续有透明图片合并异常
        // 如果直接使用 **imagepalettetotruecolor**  函数也会有异常,可能是调色板数据未清除造成的
        // 如同把图片写到文件再读取一样,得到真彩图
    $_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); //合并
        imagetruecolortopalette($image, false, 256); //转换为调色板图像,只有调色板才能换颜色
    $color_index = imagecolorat($image, 385, 925); //获取颜色索引值(斑纹颜色)
    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;

    
    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); //转换为调色板图像,只有调色板才能换颜色
    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)); //修改颜色

        // 如同把图片写到文件再读取一样,得到真彩图,与上面一样,如果不这样处理后续的透明图合并将会有异常
    $_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;

    //添加背景
    $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怎么合并图片并变动部分颜色

到此,相信大家对“php怎么合并图片并变动部分颜色”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: php怎么合并图片并变动部分颜色

本文链接: https://lsjlt.com/news/78146.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • php怎么合并图片并变动部分颜色
    本篇内容主要讲解“php怎么合并图片并变动部分颜色”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php怎么合并图片并变动部分颜色”吧!php的GD库提供了很多基...
    99+
    2024-04-02
  • css怎么改变图片颜色
    小编给大家分享一下css怎么改变图片颜色,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是csscss是一种用来表现HTML或XML等文件样式的计算机语言,主要...
    99+
    2023-06-14
  • PHP拷贝并合并图像的一部分
    这篇文章将为大家详细讲解有关PHP拷贝并合并图像的一部分,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP 拷贝并合并图像的一部分 简介 PHP 的图像处理库 GD 库提供了强大的功能来处理和编辑图像。...
    99+
    2024-04-02
  • PHP怎么实现图片合并
    本篇内容介绍了“PHP怎么实现图片合并”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!准备工作需要海报的底图小程序码的图片 代码部分...
    99+
    2023-07-05
  • css怎么改变图片的颜色
    这篇文章给大家分享的是有关css怎么改变图片的颜色的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。css的基本语法是什么css的基本语法是:1、css规则由选择器和一条或多条声明两个部分构成;2、选择器通常是需要改...
    99+
    2023-06-14
  • css怎么改变png图片的颜色
    这篇文章将为大家详细讲解有关css怎么改变png图片的颜色,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。css中可使用filter属性配合invert()、grayscale()、sepia()或hue-...
    99+
    2023-06-14
  • PHP用灰度拷贝并合并图像的一部分
    ...
    99+
    2024-04-02
  • php怎么上传图片并显示图片
    在PHP中,可以使用`$_FILES`数组来处理上传的文件。以下是一个简单的示例代码,演示了如何上传图片并显示图片:```上传图片`...
    99+
    2023-10-11
    php
  • 怎么在Android中使用Drawable改变图片的颜色
    今天就跟大家聊聊有关怎么在Android中使用Drawable改变图片的颜色,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.利用color资源对Drawable变色Drawable...
    99+
    2023-05-30
    android drawable
  • 怎么在Cacti中合并两幅图片
    本篇内容主要讲解“怎么在Cacti中合并两幅图片”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在Cacti中合并两幅图片”吧!Cacti是一个很棒的开源网络监视系统,它广泛使用于图形化地展示...
    99+
    2023-06-16
  • HTML5怎么实现渐变背景图片并自动下载
    这篇“HTML5怎么实现渐变背景图片并自动下载”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇...
    99+
    2024-04-02
  • php怎么读取图片并输出
    php中读取和输出图像的步骤:使用 imagecreatefrom() 函数根据图像类型读取图像。设置 http 标头以正确显示图像。使用 imagepng() 函数将图像输出到浏览器。...
    99+
    2024-05-14
  • 使用php怎么压缩图片并保持大小不变
    这篇文章将为大家详细讲解有关使用php怎么压缩图片并保持大小不变,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。cdn静态资源包oss管理文件资源,不一定是图片,也可以是文件哦搭建自己的文件服...
    99+
    2023-06-14
  • 使用canvas怎么拼合图片并导出
    今天就跟大家聊聊有关使用canvas怎么拼合图片并导出,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。canvas绘图的基本方法,如下:const myCanvas ...
    99+
    2023-06-09
  • Python怎么实现自动合并Word并添加分页符
    这篇文章主要介绍“Python怎么实现自动合并Word并添加分页符”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python怎么实现自动合并Word并添加分页符”文章能帮助大家解决问题。现有多个Wo...
    99+
    2023-07-05
  • 使用php怎么合并数组不改变键值
    使用php怎么合并数组不改变键值?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在php中我们通常会使用array_merge()函数来合并一个或多个数组,如下所示:例如:$...
    99+
    2023-06-15
  • php怎么实现图片查询并显示功能
    在网站开发中,图片传送是一个非常重要的功能。其中,PHP查询图片传送是一种常见的实现方式。它可以让用户通过输入关键字,在数据库中查询相关的图片,并将其显示在网页上,以便用户进行查看和下载。实现PHP查询图片并显示的方法有很多种,下面我们将介...
    99+
    2023-05-14
  • OpenCV图像算法怎么实现图像切分图像合并
    本篇内容介绍了“OpenCV图像算法怎么实现图像切分图像合并”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!将一张图片切分成多个小图片并将小图...
    99+
    2023-06-30
  • php怎么将二维数组合并不改变键值
    本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑在php中,可以使用array_merge_recursive()函数来不改变键值的合并二维数组。array_merge_recursive() 函数用于把一个或多个数...
    99+
    2019-11-03
    php 合并数组
  • css怎么实现鼠标经过文字背景颜色或图片发生变化
    本篇内容介绍了“css怎么实现鼠标经过文字背景颜色或图片发生变化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作