python PIL 操作图片

本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/article/python_PIL_pictures/

python中对图片的操作多种多样,本文介绍其中一种:PIL

Image 类是 PIL 库中一个非常重要的类,通过这个类来创建实例可以有直接载入图像文件,读取处理过的图像和通过抓取的方法得到的图像这三种方法。

安装

PIL并不是包名,要使用该包需要首先安装pillow包。

pip install pillow

博文指出PIL和pillow不是同一个事物,且PIL和pillow不能共存,暂没有查证。目前通过安装pillow包使用PIL没有发现问题。

从文件中读取图片

from PIL import Image
myimg = Image.open('python.png')
myimg
# output: <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=1890x800 at 0x26D5E8B8828>
dir(myimg)
# output: ['_Image__transformer', '_PngImageFile__idat', '__array_interface__', '__class__', '__copy__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_close_exclusive_fp_after_loading', '_copy', '_crop', '_dump', '_ensure_mutable', '_exclusive_fp', '_expand', '_min_frame', '_new', '_open', '_repr_png_', '_seek_check', 'alpha_composite', 'category', 'close', 'convert', 'copy', 'crop', 'decoderconfig', 'decodermaxblock', 'draft', 'effect_spread', 'filename', 'filter', 'format', 'format_description', 'fp', 'frombytes', 'fromstring', 'getbands', 'getbbox', 'getchannel', 'getcolors', 'getdata', 'getextrema', 'getim', 'getpalette', 'getpixel', 'getprojection', 'height', 'histogram', 'im', 'info', 'load', 'load_end', 'load_prepare', 'load_read', 'mode', 'offset', 'palette', 'paste', 'png', 'point', 'putalpha', 'putdata', 'putpalette', 'putpixel', 'pyaccess', 'quantize', 'readonly', 'remap_palette', 'resize', 'rotate', 'save', 'seek', 'show', 'size', 'split', 'tell', 'text', 'thumbnail', 'tile', 'tobitmap', 'tobytes', 'toqimage', 'toqpixmap', 'tostring', 'transform', 'transpose', 'verify', 'width']
myimg.show()
# 使用默认看图软件打开

从矩阵生成图片

注意矩阵的下述属性:

  1. 维度 要么是两维的(黑白),要么是三维的(彩色)且第三维为3
  2. 数据类型 必须为uint8型,建议使用numpy

彩色(三通道)

from PIL import Image
import numpy as np
Image.fromarray(np.zeros([3,3,3],np.uint8))
# output: <PIL.Image.Image image mode=RGB size=3x3 at 0x26D5ED0FB70> 

黑白(单通道)

from PIL import Image
import numpy as np
Image.fromarray(np.zeros([3,3],np.uint8))
# output: <PIL.Image.Image image mode=L size=3x3 at 0x26D5ECCAE80>

注意如果第三维通道数为1,会报错

图片resize

myimg
# output: <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=1890x800 at 0x26D5E8B8828>
myimg.resize((4,4))
# output: <PIL.Image.Image image mode=RGBA size=4x4 at 0x26D5FB4AD68>

图片保存

myimg.resize((4,4)).save('hello.png')

报错信息

TypeError: Cannot handle this data type

这种一般是通道数不对

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏eguid开源技术分享

为什么使用dojo?dojo与jquery有什么不同?dojo适合什么开发场景?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

6510
来自专栏工作笔记精华

javascript插件的几种写法

var Helloword = function(objId){ var _get_dom = function(Id){ re...

4910
来自专栏eguid开源技术分享

Dojo初探之5:dojo的request(请求)操作、请求过程事件绑定和隐藏数据data()操作(基于dojo1.11.2版本)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

3910
来自专栏戚银技术成长之路

【Go】slice的一些使用技巧

slice 是 Go 语言十分重要的数据类型,它承载着很多使命,从语言层面来看是 Go 语言的内置数据类型,从数据结构来看是动态长度的顺序链表,由于 Go 不能...

10630
来自专栏小麦苗的DB宝专栏

【DB笔试面试675】在Oracle中,如何快速复制表或插入数据?

快速插入数据可以指定APPEND提示,需要注意的是,在NOARCHIVELOG模式下,默认用了APPEND就是NOLOGGING模式的。在ARCHIVELOG下...

9530
来自专栏小皮咖

underscore 诞生记(一)—— 基本结构搭建

underscore 是一款成熟可靠的第三方开源库,正如 jQuery 统一了不同浏览器之间的 DOM 操作的差异,让我们可以简单地对 DOM 进行操作,und...

6320
来自专栏小皮咖

带你实现一个 JSONP 实例

4、可读性较强,虽然比不上 XML 那么一目了然,但在合理的依次缩进之后还是很容易识别的;

8220
来自专栏eguid开源技术分享

Dojo初探之3:dojo的DOM操作、query操作和domConstruct元素位置操作(基于dojo1.11.2版本)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

6010
来自专栏全栈修仙之路

Angular 6.x 基础教程

若想进一步了解 Angular CLI 的详细信息,请参考 Angular CLI 终极指南。

9020
来自专栏云架构修炼手册

编写自己的jquery组件

前提,网上针对jquery ajax方式获取数据的翻页组件很多,有一个应用未使用ajax,而是直接通过jsp模板渲染数据,没有找到合适的组件。那么就自己手写一个...

4020

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励