Python Pillow:制作透明度渐变

2023-12-22

我有在图像上添加渐变的代码。

def st(path, gradient_magnitude=2.):
    im = Image.open(path)
    if im.mode != 'RGBA':
        im = im.convert('RGBA')
    width, height = im.size
    gradient = Image.new('L', (width, 1), color=0xFF)
    for x in range(width):
        gradient.putpixel((x, 0), int(255 * (1 - gradient_magnitude * float(x) / width)))
    alpha = gradient.resize(im.size)
    black_im = Image.new('RGBA', (width, height), color=0x000000)
    black_im.putalpha(alpha)
    gradient_im = Image.alpha_composite(im, black_im)
    gradient_im.save('out.jpg', 'JPEG')

After run I get this image enter image description here

如何使渐变更加透明?


尝试这个。 0.9 或 0.95 的初始不透明度值应该可以满足您的需求。我还对代码进行了一些重构。

from PIL import Image

def apply_black_gradient(path_in, path_out='out.png',
                         gradient=1., initial_opacity=1.):
    """
    Applies a black gradient to the image, going from left to right.

    Arguments:
    ---------
        path_in: string
            path to image to apply gradient to
        path_out: string (default 'out.png')
            path to save result to
        gradient: float (default 1.)
            gradient of the gradient; should be non-negative;
            if gradient = 0., the image is black;
            if gradient = 1., the gradient smoothly varies over the full width;
            if gradient > 1., the gradient terminates before the end of the width;
        initial_opacity: float (default 1.)
            scales the initial opacity of the gradient (i.e. on the far left of the image);
            should be between 0. and 1.; values between 0.9-1. give good results
    """

    # get image to operate on
    input_im = Image.open(path_in)
    if input_im.mode != 'RGBA':
        input_im = input_im.convert('RGBA')
    width, height = input_im.size

    # create a gradient that
    # starts at full opacity * initial_value
    # decrements opacity by gradient * x / width
    alpha_gradient = Image.new('L', (width, 1), color=0xFF)
    for x in range(width):
        a = int((initial_opacity * 255.) * (1. - gradient * float(x)/width))
        if a > 0:
            alpha_gradient.putpixel((x, 0), a)
        else:
            alpha_gradient.putpixel((x, 0), 0)
        # print '{}, {:.2f}, {}'.format(x, float(x) / width, a)
    alpha = alpha_gradient.resize(input_im.size)

    # create black image, apply gradient
    black_im = Image.new('RGBA', (width, height), color=0) # i.e. black
    black_im.putalpha(alpha)

    # make composite with original image
    output_im = Image.alpha_composite(input_im, black_im)
    output_im.save(path_out, 'PNG')

    return
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python Pillow:制作透明度渐变 的相关文章

随机推荐

  • 在 Drupal 8 中的特定节点类型上使用预处理钩子

    我已经成功使用预处理页面挂钩 例如 function mytheme preprocess page node front variables and function mytheme preprocess page node 12 var
  • 如何在 foreachBatch 中使用临时表?

    我们正在构建一个流平台 其中批量使用 SQL 至关重要 val query streamingDataSet writeStream option checkpointLocation checkPointLocation foreachB
  • 从具有复合主键的另一个表插入或更新表

    我正在寻找正确的语法和方法来直接从 SQL 执行以下操作 插入或更新 如果数据已存在 TableMain从包含的数据TableA两者具有相同的复合主键 两个表都定义为 CREATE TABLE TableA TID0 int NOT NUL
  • 如何使用 Moya Swift 使用多部分请求上传图像?

    我使用的是 Moya 10 0 1 当我尝试将图像上传到服务器时遇到问题 我确实遵循了分段上传示例 https github com Moya Moya blob master docs Examples MultipartUpload m
  • 条件运算符无法解析重载的成员函数指针

    我在处理 C 中重载成员函数的指针时遇到了一个小问题 以下代码可以正常编译 class Foo public float X const void X const float x float Y const void Y const flo
  • -webkit-filter:其他浏览器的阴影

    我有一个使用以下 css 应用的投影效果 webkit filter drop shadow 0 1px 10px rgba 113 158 206 0 8 有谁知道其他浏览器的等效项是什么 请注意我无法使用box shadow 0 1px
  • Android - 如何发送崩溃报告?

    似乎从 Android 2 2 开始 有一个用于发送崩溃报告的新功能 如链接中所述 http www androidcentral com new android app crash report tool already and runn
  • 阅读《Java 并发实践》以获取更多并发示例?

    SO 的许多人建议通过阅读来深入了解 Java 并发性Java 并发实践 JCIP https rads stackoverflow com amzn click com 0321349601 有时道格 李 Doug Lea 1999 年出
  • 预授权在控制器上不起作用

    我试图在方法级别定义访问规则 但它不起作用 安全配置 Configuration EnableWebSecurity EnableGlobalMethodSecurity prePostEnabled true public class S
  • 仅客户端与 Meteor 的反应?

    我在服务器上发布了一个集合 并在客户端上自动订阅 我想在会话上设置 选定 项目 并更新模板以仅显示选定项目 但似乎这只能通过往返服务器来完成 这是完全没有必要的 Common var Missions new Meteor Collecti
  • 有没有办法在 PHP 中检查 cookie 是否为 httponly

    有没有办法检查 cookie 是否是 httponly 在 php 中 我认为这是不可能的 因为此信息不包含在浏览器发送的原始标头中 事实上 将这样的标志发送回服务器是没有意义的 因为它们对服务器来说没有意义 只会浪费带宽
  • Objective-C:如何为异步方法正确使用内存管理

    我需要调用一个启动一些异步代码的方法 MyClass myClass MyClass alloc init myClass startAsynchronousCode 现在我不能简单地释放它 因为这会导致错误 因为代码仍在运行 myClas
  • Python TypeError:^ 不支持的操作数类型:“float”和“int”

    我编写了一个简单的程序 它使用数值积分来近似计算定积分 然而 当谈到为什么我在标题中收到错误时 我感到很困惑 请记住 我已经一年半没有接触过Python了 所以这可能是我错过的一些非常明显的东西 但是如果你能帮助我 我仍然会很感激 这是代码
  • 如何升级gtk2hsC2hs?

    我在尝试cabal install glib 0 12 3在我的 Ubuntu 11 10 下使用 cabal install 0 10 2 但是 它显示以下错误消息 setup The program gtk2hsC2hs version
  • 如何在 Microsoft Access 2010 中设置与 SQL Server 2008 的 ADODB 连接?

    我刚刚在笔记本电脑上安装了 SQL Server 2008 我还安装了 Microsoft Access 2010 使用 VBA 我尝试在 SQL Server 上创建到我自己的数据库的 ADODB 连接 但我无法找到正确的代码行 当我在下
  • Xcode 在创建机器人时无法单击“下一步”?

    我正在尝试为测试项目设置一个机器人 我有一台运行服务器应用程序的 mac mini 该服务器对本地网络和所有人都是可见的 共享方案后 我进入 Xcode 并创建一个机器人 问题是 我无法启用右下角的 下一步 按钮 因此 我无法继续创建机器人
  • CoreBluetooth 无法找到设备,但 iOS 可以

    我有一个蓝牙条形码扫描仪 其规格说明它是蓝牙 2 0 2 类 这很奇怪 因为我的 iPhone 5 iOS7 可以找到并连接它 我以为iOS只能连接BLE设备 但在我的应用程序中 我无法扫描该设备 我不知道这是否是因为它的蓝牙规格 我希望有
  • 在 Spray 中发送发布请求

    我需要使用以下命令发出一个简单的 HTTP 请求spray框架 我在他们的网站上找到了一些示例 但结果证明它们很复杂并且涉及 Akka 这对我来说不是必需的 此外 我需要能够填写请求的标头 例如X Application content t
  • R 中的 strsplit 与元字符

    我有大量数据 其中分隔符是反斜杠 我正在 R 中处理它 并且很难找到如何分割字符串 因为反斜杠是一个元字符 例如 一个字符串看起来像这样 1128 0019 XA5 E2R 366 00 15 我想把它分成 字符 但是当我运行 strspl
  • Python Pillow:制作透明度渐变

    我有在图像上添加渐变的代码 def st path gradient magnitude 2 im Image open path if im mode RGBA im im convert RGBA width height im siz