如何使用 Python Pillow 更改图像格式而不将其写入磁盘

2023-12-19

我从互联网上得到了枕头图片:

response= urllib2.urlopen(<url to gif image>)
img = Image.open(cStringIO.StringIO(response.read()))

我想将它与 tesserocr 一起使用,但它不适用于 GIF 图像。

如果我将图像另存为 PNGimg.save("tmp.png")并加载它img = Image.open("tmp.png")一切正常。

有没有办法在不写入磁盘的情况下进行这种转换?


import io
from PIL import Image


def convertImageFormat(imgObj, outputFormat=None):
    """Convert image format
    Args:
        imgObj (Image): the Pillow Image instance
        outputFormat (str): Image format, eg: "JPEG"/"PNG"/"BMP"/"TIFF"/...
            more refer: https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html
    Returns:
        bytes, binary data of Image
    Raises:
    """
    newImgObj = imgObj
    if outputFormat and (imgObj.format != outputFormat):
        imageBytesIO = io.BytesIO()
        imgObj.save(imageBytesIO, outputFormat)
        newImgObj = Image.open(imageBytesIO)


    return newImgObj

调用示例:

pngImgFile = "xxx.png"
pngImgObj = Image.open(pngImgFile)
convertToFormat = "JPEG"
convertedJpgImgBytes = convertImageFormat(pngImgObj, convertToFormat)

高级版convertImageFormat可以参考我的lib克里凡枕头.py https://github.com/crifan/crifanLibPython/blob/master/python3/crifanLib/thirdParty/crifanPillow.py

import io
from PIL import Image


def convertImageFormat(imgObj, outputFormat=None, isOptimize=False, isKeepPrevValues=True):
    """Convert image format
    Args:
        imgObj (Image): the Pillow Image instance
        outputFormat (str): Image format, eg: "JPEG"/"PNG"/"BMP"/"TIFF"/...
            more refer: https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html
        isOptimize (bool): do optimize when using save to convert format
        isKeepPrevValues (bool): keep previous property values, such as: filename
    Returns:
        bytes, binary data of Image
    Raises:
    """
    newImgObj = imgObj
    if outputFormat and (imgObj.format != outputFormat):
        imageBytesIO = io.BytesIO()
        if isOptimize:
            imgObj.save(imageBytesIO, outputFormat, optimize=True)
        else:
            imgObj.save(imageBytesIO, outputFormat)
        newImgObj = Image.open(imageBytesIO)
        if isKeepPrevValues:
            if imgObj.filename:
                newImgObj.filename = imgObj.filename


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

如何使用 Python Pillow 更改图像格式而不将其写入磁盘 的相关文章

随机推荐

  • ES 计算为列产生不可靠的结果(反向风险):1

    我不断收到此错误 ES calculation produces unreliable result inverse risk for column 1使用时的消息DEoptim 也许我忽略了一些事情 所以我需要一些帮助来解决这个问题 我在
  • 三星 Galaxy S4 和 Phonegap 问题

    我正在使用 Phonegap 编写一个应用程序 该应用程序包括使用 HTML5 的画布 当我在 Eclipse 的 Android 模拟器上运行该应用程序时 一切正常 缓慢但正常 当我连接 Galaxy S4 并运行应用程序时 它会加载并很
  • 如何在Cesium.js中绘制自定义动态广告牌

    我目前正在使用铯进行地图应用程序 并且我需要为我正在绘制的每个项目提供状态指示器 例如 如果我正在绘制的项目是一架飞机 那么我需要有燃料状态指标 我无法使用 Cesium 的绘图工具来执行此操作 因为它们是使用地理位置绘制的 但我需要我的状
  • Android Studio 3.0子模块编译失败

    应用程序级别构建 gradle 依赖项 devCompile project path mymodule configuration devRelease proCompile project path mymodule configura
  • NHibernate MappingException:无法编译映射文档

    在我的开发 Web 应用程序上 NHibernate 运行得很好 当我预编译和部署站点时 在创建 SessionFactory 时收到 MappingException 以下是跟踪中的一些信息 NHibernate Cfg Environm
  • Struts 和 Spring 一起吗?

    我对 Struts 和 Spring 都很陌生 我需要知道如何访问 Struts ActionForm 中的 Spring 服务 即使是指向正确方向的指针也会受到赞赏 从 struts 1 ActionForm 类中 您将需要 WebApp
  • 带回形针的 Rails api

    我有 Rails api 和简单的回形针模型 def create photo Photo new photo params if photo save render json photo status created location p
  • android ndk 错误“没有这样的文件或目录”?

    我的 include 文件夹中有一些头文件 这是 Android mk 文件内容 include call all subdir makefiles LOCAL PATH call my dir include CLEAR VARS LOC
  • 是否可以将控制台输出重定向到变量?

    在 R 中 我想知道是否可以暂时将控制台的输出重定向到变量 附注网上有一些关于如何使用的示例sink 将输出重定向到文件名 但我找不到任何显示如何重定向到变量的内容 附注在实践中 这很有用 因为我需要从 R 中的一些内置函数打印出默认控制台
  • 如何使用 XAMPP 的自签名证书来处理使用 cURL 的 HTTPS 请求?

    我安装了 XAMPP 需要测试一些 HTTPS 请求 首先 我尝试配置 XAMPP 以便可以使用 HTTPS 请求 这就是我所做的 1 在php ini文件中 我取消了注释openssl module 2 在httpd conf文件中 我取
  • 如何在 Eclipse 中设置命令行参数?

    我在 Eclipse 中设置命令行参数时遇到问题 我在互联网上搜索过 但找不到任何可以帮助人们使用隐形文本框的东西 我什至尝试按帮助按钮 但没有任何反应 如何在 Eclipse 中为 Java 项目设置命令行参数 Eclipse 的屏幕截图
  • 在 TypeScript 中将对象键/值的映射强类型化为具有相同键但不同值的对象

    我通常需要获取一个对象并生成一个具有相同键但具有从 KVP 到某些映射的值的新对象T JavaScript 的实现很简单 Object map obj fn gt Object fromEntries Object entries obj
  • 如何对 ES6 映射进行 JSON.stringify?

    我想开始使用ES6 Map https developer mozilla org en US docs Web JavaScript Reference Global Objects Map而不是 JS 对象 但我被阻止了 因为我不知道如
  • 如何在 TabPage 标题旁边显示 ErrorProvider 错误图标?

    Edit 这不是重复的TabControl C 中的图标 如何实现 https stackoverflow com questions 3663603 icons in tabcontrol c sharp how 问题是关于向选项卡页面添
  • JVM 崩溃后的 Spring Batch

    JVM 崩溃后如何重新启动作业 当我的 JVM 崩溃或系统出现故障时 我正在运行大量在 Spring Batch 框架中实现的作业 失败后如何重新启动这些作业 您需要在重新启动 正在运行 的作业之前将其标记为失败 如下所示 List
  • GetVersionEx Windows 10 检测为 Windows 8 [重复]

    这个问题在这里已经有答案了 我正在使用 GetVersionEx 来获取操作系统 但我不知道为什么它将 Windows 10 报告为 Windows 8 我知道它已被弃用 但我找不到其他解决方案 switch osinfo dwMajorV
  • 是否有针对 .NET 实现的 WebSocket 客户端? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 如何使证书中的私钥不可导出C#

    因此 您将在下面找到我的代码 该代码创建带有私钥的自签名证书 它存储在用户存储中 现在 当我使用 mmc 工具时 我可以从证书中导出私钥吗 我认为这是您在创建证书时必须显式添加的标志 所以我想知道的是 如何更改此代码以使私钥不再可通过 mm
  • 在 Android 中将 Facebook 聊天与 Asmack API 集成

    我尝试按照中的建议实施聊天支持这个博客 http davanum wordpress com 2008 12 29 updated xmpp client for android 目前 我正在使用以下代码来实现聊天界面 Java代码 我已经
  • 如何使用 Python Pillow 更改图像格式而不将其写入磁盘

    我从互联网上得到了枕头图片 response urllib2 urlopen