图片颜色的类型

1 (1-bit pixels, black and white, stored with one pixel per byte)

L (8-bit pixels, black and white)

P (8-bit pixels, mapped to any other mode using a color palette)

RGB (3x8-bit pixels, true color)

RGBA (4x8-bit pixels, true color with transparency mask)

CMYK (4x8-bit pixels, color separation)

YCbCr (3x8-bit pixels, color video format)

I (32-bit signed integer pixels)

F (32-bit floating point pixels)

从数组产生图片

从数组产生彩色图片

numpy天然就是处理图像数据的好工具,skimage库大量的使用numpy,实现了部分opencv的功能,非常值得研究。

  1. from PIL import Image
  2. import numpy as np
  3. data = -np.ones((100, 3)).reshape(10, 10, 3).astype('byte')
  4. data[:5, :5, 2] = 0 # 只保留RG两色,即为黄色
  5. data[5:, 5:, 1] = 0
  6. data[:5, 5:, 0] = 0
  7. img = Image.fromarray(data, "RGB")
  8. img.show()

从数组产生灰度图片

  1. from PIL import Image
  2. import numpy as np
  3. """
  4. 当使用fromarray产生图片时,图片的类型(1,L,P之类的)跟数组每个元素的大小必须匹配!
  5. """
  6. img = Image.fromarray(np.array([255]*100).astype(np.byte).reshape(10,10), 'L')
  7. print(list(img.getdata()))
  8. img.show()

PIL中的柱状图

  1. from PIL import Image
  2. img=Image.open("haha.jpg")
  3. res=img.histogram()
  4. print(len(res))

使用调色板

  1. from PIL import Image
  2. import numpy as np
  3. """
  4. 如果mode=1,不管数组的实际长度,总是取其中的前width*height位,mode=1是黑白图
  5. mode=L是灰度图
  6. mode=P是调色板图,可以容纳256种颜色,它可以是彩图
  7. """
  8. # 首先创建一个灰度图,其中每个像素都是122灰度
  9. img = Image.fromarray((122 * np.ones((20, 20))).astype(np.byte), "P")
  10. def method1():
  11. # 创建一个pallete,注意pallete只能用于mode=L和mode=P的情况,用于将灰度图彩色化
  12. pallete = np.zeros(256 * 3).astype(np.byte) # 与pallete数组的形状无关,只取前768个byte
  13. # 将灰度为122的元素置为红色
  14. pallete[122 * 3] = 255
  15. img.putpalette(pallete)
  16. def method2():
  17. # 创建一个pallete,注意pallete只能用于mode=L和mode=P的情况,用于将灰度图彩色化
  18. pallete = np.zeros(256 * 3).astype(np.byte) # 与pallete数组的形状无关,只取前768个byte
  19. # 将灰度为122的元素置为红色
  20. pallete[122 * 3] = 255
  21. img.putpalette(pallete)
  22. def method3():
  23. pallete = [0] * 768
  24. pallete[122 * 3] = 255
  25. img.putpalette(pallete)
  26. method2()
  27. img.show()
  28. # 灰度122映射为RGB应为(122,122,122),RGB三色相同必然是灰色

使用图片的info

  1. """
  2. 能否保留文件info信息取决于图片类型
  3. """
  4. img = Image.fromarray((128 * np.ones((20, 20))).astype(np.byte), "L")
  5. img.info['user'] = "weidiao"
  6. print(img.info)
  7. img.save("haha.pdf")
  8. img = Image.open("haha.pdf")
  9. print(img.info)

不论何时,总是想着全部掌握一个库都是一种愚蠢的思想。一方面是没有必要,另一方面是不太可能。

不论何时,浏览一下库的全部内容都是一种智慧,一遍记不住浏览两遍,浏览的次数多了,不仅有助于知道库的功能,还有助于了解一些好的设计。

PIL笔记的更多相关文章

  1. 【Python笔记】图片处理库PIL的源代码安装步骤

    前段时间项目须要对某些图片打水印,用到Python的PIL库,本文以Imaging-1.1.7为例,记录PIL库的源代码编译/安装步骤. PIL全称Python Image Library.它支持多种 ...

  2. 潭州课堂25班:Ph201805201 爬虫基础 第九课 图像处理- PIL (课堂笔记)

    Python图像处理-Pillow 简介 Python传统的图像处理库PIL(Python Imaging Library ),可以说基本上是Python处理图像的标准库,功能强大,使用简单. 但是由 ...

  3. Python PIL模块笔记

    利用python pil 实现给图片上添加文字 图片中添加文字#-*- coding: utf-8 -*- from PIL import Image,ImageDraw,ImageFont ttfo ...

  4. Python PIL库学习笔记

    1.PIL简介 Python Imaging Library(缩写为PIL)(在新的版本中被称为Pillow)是Python编程语言的开源库,它增加了对打开,操作和保存许多不同图像文件格式的支持.它适 ...

  5. Python 学习笔记之—— PIL 库

    PIL,全称 Python Imaging Library,是 Python 平台一个功能非常强大而且简单易用的图像处理库.但是,由于 PIL 仅支持到Python 2.7,加上年久失修,于是一群志愿 ...

  6. 【笔记】PIL 中的 Image 模块

    Image 模块提供了一个同名类(Image),也提供了一些工厂函数,包括从文件中载入图片和创建新图片.例如,以下的脚本先载入一幅图片,将它旋转 45 度角,并显示出来: 1 >>> ...

  7. Python PIL、Pillow笔记

    原文链接:https://blog.csdn.net/FlashKoala/article/details/90649464 一.PIL.Pillow简介 PIL(Python Imaging Lib ...

  8. ejoy2d源码阅读笔记1

    一直想学lua,学它如何与C结合来作逻辑,所以找了云风的一份代码来研究.这份代码是个框架库,叫ejoy2d,据云风的博客说,他们最新的手机游戏用的就是这套框架,所以实用性应该很强,虽然我不是学游戏的, ...

  9. Requests:Python HTTP Module学习笔记(一)(转)

    Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...

随机推荐

  1. Java 读取某个目录下所有文件、文件夹

    /** * @Author: * @Description:获取某个目录下所有直接下级文件,不包括目录下的子目录的下的文件,所以不用递归获取 * @Date: */ public static Lis ...

  2. 【R】函数-统计函数

  3. HTTP协议中源端口和目标端口的问题

    [提问] How is source port for HTTP determined? Is there ever collision in NAT?   I know that when a HT ...

  4. 为什么有的需要安全连接的的application只有开Fiddler才好用?

      Help! Running Fiddler Fixes My App??? Over the years, the most interesting class of support reques ...

  5. [Algorithm] Search element in a circular sorted array

    function findInCircularlySortedAry (ary = [], target) { ) { ; } ) { ] === target ? : -; } let , high ...

  6. Android Handler 消息处理使用

    本文内容 环境 演示 Handler 消息处理 参考资料 Handler 有两个主要作用或者说是步骤:发送消息和处理消息.在新启动的线程中发送消息,在主线程中获取.并处理消息.Android 平台只允 ...

  7. Xcode missing file or .png is missing from working copy

    当不小心在工程文件中删掉文件时.有可能会提示 .xxx   is missing from working copy 有可能是SVN引起的.删掉这个文件就好了 如果是单个文件.进入Terminal 相 ...

  8. WebSocket【转】

    1.什么是WebSocket WebSocket 是一种自然的全双工.双向.单套接字连接.使用WebSocket,你的HTTP 请求变成打开WebSocket 连接(WebSocket 或者WebSo ...

  9. python enum 枚举

    http://www.cnblogs.com/codingmylife/archive/2013/05/31/3110656.html python 3.4+ from enum import Enu ...

  10. 轻松把玩HttpClient之封装HttpClient工具类(五),携带Cookie的请求

    近期更新了一下HttpClientUtil工具类代码,主要是加入了一个參数HttpContext,这个是用来干嘛的呢?事实上是用来保存和传递Cookie所须要的. 由于我们有非常多时候都须要登录.然后 ...