使用python实现炫酷的渐变色

news2024/11/18 1:51:36

使用python实现炫酷的渐变色

  • 1、前言
  • 2、所需条件
  • 3、实现步骤
    • 步骤1:定义渐变函数
    • 步骤2:将渐变应用于目标颜色
    • 步骤3:定义参数并执行
  • 4、完整代码
  • 5、总结

1、前言

通过应用颜色渐变,可以大大提升图像的视觉效果。在这篇博客中,我们将演示如何使用Python和PIL库将水平渐变应用于与目标颜色匹配的图像。

初始图片
初始图片
经过渐变色效果
在这里插入图片描述

2、所需条件

要跟随本教程,您需要:

  • 在您的机器上安装Python。
  • 安装PIL(Pillow)库,可以使用命令 pip install pillow 进行安装。

3、实现步骤

步骤1:定义渐变函数

首先,我们需要一个函数来生成两个指定颜色之间的渐变颜色。此函数将接收起始颜色、结束颜色以及渐变步骤(或图像宽度)来生成渐变。

from PIL import Image

def gradient_color(start_color, end_color, steps):
    """
    生成从start_color到end_color之间的渐变颜色。
    """
    # 将RGB颜色转换为浮点数
    start_color = [float(c) for c in start_color]
    end_color = [float(c) for c in end_color]

    # 计算每个通道的颜色步长
    step_size = [(end - start) / steps for start, end in zip(start_color, end_color)]

    # 生成渐变颜色
    gradient = []
    for i in range(steps):
        color = [int(start + step * i) for start, step in zip(start_color, step_size)]
        gradient.append(tuple(color))

    return gradient

步骤2:将渐变应用于目标颜色

接下来,我们将编写一个函数,将生成的渐变应用于图像。该函数将更改在指定容差内与目标颜色匹配的像素的颜色。

def apply_gradient_to_specific_color(image_path, target_color, tolerance, start_color, end_color):
    """
    将水平渐变从start_color到end_color应用于与target_color匹配的像素。
    """
    # 打开图像
    image = Image.open(image_path)
    # 转换图像为RGB模式
    image = image.convert('RGB')
    # 获取图像尺寸
    width, height = image.size

    # 根据宽度生成渐变颜色
    gradient_colors = gradient_color(start_color, end_color, width)

    # 创建一个新的空白图像以应用渐变
    gradient_image = Image.new('RGB', (width, height))

    # 根据像素的x位置将渐变颜色应用于与目标颜色匹配的像素
    pixels = gradient_image.load()
    original_pixels = image.load()
    for y in range(height):
        for x in range(width):
            original_pixel = original_pixels[x, y]
            # 检查原始像素颜色是否在目标颜色的容差范围内
            if all(abs(original_pixel[channel] - target_color[channel]) <= tolerance for channel in range(3)):
                color = gradient_colors[x]
            else:
                color = original_pixel
            pixels[x, y] = color

    return gradient_image

步骤3:定义参数并执行

现在,我们可以定义目标颜色、容差、渐变的起始和结束颜色,并将我们的函数应用于图像

在这里插入代码片# 定义目标颜色、容差和渐变颜色
target_color = (0, 0, 0)  # 黑色
tolerance = 50
start_color = (100, 100, 100)  # 渐变起始颜色
end_color = (200, 200, 200)    # 渐变结束颜色

# 将渐变应用于图像
result_image = apply_gradient_to_specific_color("input_image.jpg", target_color, tolerance, start_color, end_color)
result_image.save("output_image.jpg")

4、完整代码

from PIL import Image


def gradient_color(start_color, end_color, steps):
    """
    Generate a gradient of colors between start_color and end_color.
    """
    # Convert RGB colors to floating point
    start_color = [float(c) for c in start_color]
    end_color = [float(c) for c in end_color]

    # Calculate color step size for each channel
    step_size = [(end - start) / steps for start, end in zip(start_color, end_color)]

    # Generate gradient colors
    gradient = []
    for i in range(steps):
        color = [int(start + step * i) for start, step in zip(start_color, step_size)]
        gradient.append(tuple(color))

    return gradient


def apply_gradient_to_specific_color(image_path, target_color, tolerance, start_color, end_color):
    """
    Apply a horizontal gradient from start_color to end_color to pixels matching the target_color.
    """
    # Open image
    image = Image.open(image_path)
    # Convert image to RGB
    image = image.convert('RGB')
    # Get image size
    width, height = image.size

    # Generate gradient colors based on width
    gradient_colors = gradient_color(start_color, end_color, width)

    # Create a new blank image to apply gradient
    gradient_image = Image.new('RGB', (width, height))

    # Apply gradient color to each pixel based on its x position if it matches the target color
    pixels = gradient_image.load()
    original_pixels = image.load()
    for y in range(height):
        for x in range(width):
            original_pixel = original_pixels[x, y]
            # Check if the original pixel color is within the tolerance range of the target color
            if all(abs(original_pixel[channel] - target_color[channel]) <= tolerance for channel in range(3)):
                color = gradient_colors[x]
            else:
                color = original_pixel
            pixels[x, y] = color

    return gradient_image


# Define target color, tolerance, and gradient colors
target_color = (0, 0, 0)  # White
tolerance = 50
start_color = (100, 100, 100)  # Red
end_color =  (200, 200, 200) # Blue

# Apply gradient to image
result_image = apply_gradient_to_specific_color("input_image.jpg", target_color, tolerance, start_color, end_color)
result_image.save("output_2.jpg")

5、总结

在这篇博客中,我们演示了如何使用Python和PIL库将水平渐变应用于图像中的特定颜色。欢迎您尝试使用不同的目标颜色、渐变和容差值,以实现您在图像上的理想效果。编程愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1712223.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2025第十届美陈展

展位又遭疯抢&#xff01;2025第十届美陈展释放“无界之美” 美是全球通用的语言&#xff0c;人类对美的追求始终如一&#xff0c;大众审美在经历了时代的变迁后开始趋同&#xff0c;东方文明深处的美学经济开始崛起。 在如今商业迈入存量阶段&#xff0c;以品牌为突破口打造…

基于VMware安装Linux虚拟机

1.准备Linux环境 首先&#xff0c;我们要准备一个Linux的系统&#xff0c;成本最低的方式就是在本地安装一台虚拟机。为了统一学习环境&#xff0c;不管是使用MacOS还是Windows系统的同学&#xff0c;都建议安装一台虚拟机。 windows采用VMware&#xff0c;Mac则采用Fusion …

有免费通配符证书吗?哪里可以申请?

市面上的免费SSL证书大多数为单域名证书&#xff0c;如果您的主域名拥有众多子域名&#xff0c;逐一申请单域名SSL证书不太现实&#xff0c;下面为介绍一款永久免费使用的通配符SSL证书申请流程 1 选择免费通配符证书提供商 免费通配符证书申请点击这里直接获取https://www.…

【DZ模板】价值288克米设计APP手机版DZ模板 数据本地化+完美使用

模版介绍 【DZ模板】价值288克米设计APP手机版DZ模板 数据本地化完美使用 腾讯官方出品discuz论坛DIY的后台设置&#xff0c;功能齐全&#xff0c;论坛功能不亚于葫芦侠&#xff0c;自定义马甲&#xff0c;自定义认证&#xff0c;自定义广告&#xff0c;完全可以打造出自己想…

据阿谱尔APO Research调研显示,2023年全球模塑纤维包装市场销售额约为60.4亿美元

根据阿谱尔 (APO Research&#xff09;的统计及预测&#xff0c;2023年全球模塑纤维包装市场销售额约为60.4亿美元&#xff0c;预计在2024-2030年预测期内将以超过2.7%的CAGR&#xff08;年复合增长率&#xff09;增长。 对永续和环保包装解决方案的需求不断增长&#xff0c;以…

Python | Leetcode Python题解之第103题二叉树的锯齿形层序遍历

题目&#xff1a; 题解&#xff1a; class Solution:def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:if not root: return []res, deque [], collections.deque()deque.append(root)while deque:tmp []# 打印奇数层for _ in range(len(deque)…

java8以上版本

java9及其以上版本 一、JDK17 LTS 常用新特性1、switch语句的增强2、字符串拼接3、判断类型instanceof自动类型转换4、密封类 关键字 sealed permits5、record类6、优化空指针异常7、ZGC垃圾收集器 一、JDK17 LTS 常用新特性 1、switch语句的增强 在 Java 17中&#xff0c;sw…

全面指南:IP SSL证书的申请与部署步骤

不同于常见的域名型SSL证书&#xff0c;IP SSL证书是专门用于为IP地址提供安全保护的SSL证书类型&#xff0c;适用于那些直接通过IP地址访问的网站或服务。本文将详细介绍IP SSL证书的申请步骤及其部署过程&#xff0c;帮助您轻松实现IP地址的安全加密。 一、了解IP SSL证书 …

CSS Canvas鼠标点击特效之天女散花(文本粒子动画)

1.效果 2.代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><style>body,html {margin: 0;padding: 0;w…

Docker HTTPS api V2 Manifest V 2, Schema 2 下的免装docker下载镜像的方法

目录 前言 下载镜像代码 使用方法 原代码中无法适配 Schema 2 的原因浅析 如何解决 相对原代码改动的东西 前言 本文提供代码主要是基于 https://github.com/NotGlop/docker-drag 提供的代码修改的。链接中提供的代码应该是是基于HTTPS api V2 Manifest V 2, Schema 1实…

【算法实战】每日一题:统计一个序列向某个方向的比他小的数的个数(非暴力)

题目 统计一个序列向某个方向的比他小的数的个数 思路 用单调栈&#xff0c;虽然这里说的是统计比他小的&#xff0c;但是是求和&#xff0c;所以我们可以用在用单调栈的时候统计里面所有比他大的元素 这两个级别上是一样的 伪代码 声明变量 n、num 和 sum 为整数。 声明…

实操专区-第15周-课堂练习专区-漏斗图与金字塔图

实操专区-第15周-课堂练习专区-漏斗图 下载安装ECharts&#xff0c;完成如下样式图形。 代码和截图上传 基本要求&#xff1a;下图3选1&#xff0c;完成代码和截图 完成 3.1.3.16 漏斗图中的任务点 基本要求&#xff1a;2个选一个完成&#xff0c;多做1个加2分。 请用班级学号姓…

vue组件的基本使用方法

组件 【1】组件是什么&#xff1f; 组件就是&#xff1a;扩展 HTML 元素&#xff0c;封装可重用的代码&#xff0c;目的是复用例如&#xff1a;有一个轮播图&#xff0c;可以在很多页面中使用&#xff0c;一个轮播有js&#xff0c;css&#xff0c;html组件把js&#xff0c;cs…

使用 Django 连接 MySQL 数据库

文章目录 步骤一&#xff1a;安装必要的库和驱动步骤二&#xff1a;配置数据库连接步骤三&#xff1a;执行数据库迁移步骤四&#xff1a;开始使用 MySQL 数据库创建一个模型迁移模型到数据库使用模型进行数据操作创建新记录&#xff1a;查询记录&#xff1a;更新记录&#xff1…

264 基于matlab的自适应语音盲分离

基于matlab的自适应语音盲分离&#xff0c;当a和b同时对着传声器A,B说话且传声器靠得很近时&#xff0c;传声器A,B会同时接受到a和b的声音&#xff0c;即a和b产生了混叠干扰&#xff0c;此时通过自适应语音盲分离系统可以将a,b的声音分离开&#xff0c;使得一个信道只有一个人的…

【并发程序设计】11.进程间通信

11.进程间通信 &#xff08;IPC&#xff0c;InterProcess Communication&#xff09;进程和进程之间交换信息。 常用通信方式 无名管道&#xff08;pipe&#xff09;有名管道 &#xff08;fifo&#xff09;信号&#xff08;signal&#xff09;共享内存(mmap)套接字&#xff0…

平衡二叉树的构建(理论,部分函数代码)

平衡二叉树是二叉排序树的一种特殊情况&#xff0c;平衡二叉树的出现是为了在最坏情况下的时间复杂度仍然是对数级别O(logn)&#xff0c;从而保证了高效的搜索、插入和删除操作。 举个例子&#xff0c;如果有一个数组是&#xff1a;1&#xff0c;2&#xff0c;3。如果只简单的…

数据库多表查询

多表查询&#xff1a; SELECT *FROM stu_table,class WHERE stu_table.c_idclass.c_id; 多表查询——内连接 查询两张表交集部分。 隐式内连接&#xff1a; #查询学生姓名&#xff0c;和班级名称&#xff0c;隐式调用 SELECT stu_table.s_name,class.c_name FROM stu_table…

vs code 中使用SSH 连接远程的Ubuntu系统

如下图&#xff0c;找到对应的位置 在电脑上找到以下位置 打开配置如下&#xff0c;记住&#xff0c;那个root为你的用户名&#xff0c;这个用户名&#xff0c;具体根据你的用户名来设置&#xff0c;对应的密码就是你登录Ubuntu时的密码 Host root192.168.0.64User rootHostNa…

文件跨境传输法律管控越来越严格,企业该如何有效应对?

文件跨境传输已经成为非常普遍的业务需求&#xff0c;企业在世界各地的总分支处、合作伙伴&#xff0c;客户间开展业务时&#xff0c;必须基于数据的跨境流转而展开。 但随着世界各国对数据安全的重视&#xff0c;文件跨境传输也日趋严格&#xff0c;各国在法律法规上均出具了更…