python图片应用_03.08 Python应用于图像处理

@

用python来PS照片

图像的基本知识

用Python玩转图像

案例: mini照片管理系统

项目: 51备忘录V0.38

图像的基础知识

序号

内容

图像格式

常见: jpg, png, bmp ,tif, RAW...

分类

矢量图(向量) - 放大不失真

点阵图(位图) -放大会失真

颜色模型

常见的模型包括:

HSB (色相, 饱和度, 亮度): 基于人类的颜色感觉

RGB (三原色, 红绿蓝) :光色三色光, 照片, 视频

CMYK (减色模式 青, 洋红, 黄, 黑): 用于打印

波段

CIE LAB: 颜色度量的国际标准, 无关设备

L:明度通道, A:从红色到绿色, B: 从蓝色到黑色

从理论上说, 为最佳避免色彩的失真的方法是应用LAB模式编辑图片,转换成CMYK模式进行打印

大小

KB , MB, GB...

坐标

左上角开始(0, 0)

应用

照片, 图标, 图纸, 卫星遥感, 地图...

用Python玩转图像

from PIL import ImageColor

# 依赖包 pip install pillow

# 图像颜色的数字表示方法

ImageColor.getcolor('red', 'RGB')

(255, 0, 0)

ImageColor.getcolor('green', 'RGBA') # A alpha通道, 透明度, png

(0, 128, 0, 255)

# 切换工作路径

%cd C:\study\03-notebook\No3_part02\0302-homework-lanjianlan\image_ctrl

C:\study\03-notebook\No3_part02\0302-homework-lanjianlan\image_ctrl

压缩图片,获取缩略图

打开一个jpg图片, 指定工作路径

from PIL import Image

获取图片的格式, 大小, 格式

im = Image.open('luffy.jpg')

print(type('luffy.jpg'))

print(im.format, im.size, im.mode)

JPEG (800, 800) RGB

获取图像的尺寸

w, h = im.size

print("尺寸: %sx%s" % (w, h))

尺寸: 800x800

复制图像并进行缩放操作

im_copy = im.copy()

im_copy.save('luffy_a.jpg')

im_a =Image.open("luffy_a.jpg")

print(im_a.format, im_a.size, im_a.mode)

JPEG (800, 800) RGB

缩小到50%

im_a.thumbnail((w//2, h//2))

print("缩略图尺寸为: %sx%s" % (w//2, h//2))

缩略图尺寸为: 400x400

保存缩略图格式为jpg

im_a.save('luffy_b.jpg', 'jpeg')

显示图片

im_a.show()

调整大小

im_size = im_a.resize((w//4, h//4))

im_size.save('luffy_abb.jpg')

** 打开后记得关闭图像,会停留在后台

im_size.show()

调整大小,指定大小

im_size = im_a.resize((w//2, h//4))

im_size.save('luffy-2-4.jpg')

增强颜色效果模式

from PIL import ImageEnhance

enh = ImageEnhance.Contrast(im)

enh.enhance(1.3).show("30% 增强对比度")

对图像进行裁剪

box = (100, 100, 400, 400)

region = im.crop(box)

region.save("luffy-300x300.jpg")

水平旋转图像

im.rotate(90).save("luffy-90.jpg")

im.rotate(180).save("luffy-180.jpg")

im.rotate(360).save("luffy-359.jpg")

镜像翻转图像

im.transpose(Image.FLIP_LEFT_RIGHT).save("luffy_水平.jpg")

im.transpose(Image.FLIP_TOP_BOTTOM).save("luffy_上下.jpg")

图像叠加

添加水印, 复制图片, 计算位置, 粘贴合并图片

# 打开logo

logo_file = 'luffy-300x300.jpg'

im_log = Image.open(logo_file)

logo_width, logo_height = im_log.size

# 打开目标文件

target = 'store.jpg'

print(type(target))

im_target = Image.open(target)

target_width, target_height = im_target.size

# 粘贴

im_copya = im_target.copy()

im_copya.paste(im_log, (target_width-logo_width, target_height-logo_height))

im_copya.save("luffy_logo.jpg")

查看波段和每个像素的颜色值

im.getbands()

('R', 'G', 'B')

im.getpalette()

im.getpixel((1,1))

(10, 26, 52)

im.getpixel((50,50))

(10, 26, 52)

新建图片, 填充文字

from PIL import ImageDraw

im_new = Image.new("RGBA", (400, 400), 'white')

pic = ImageDraw.Draw(im_new)

pic.text((20, 20), 'lataku', fill='green')

im_new.save('lataku_words1.png')

新建图片, 填充文字并修改字体

import os

from PIL import ImageDraw, ImageFont

from PIL import Image

font_path = r'c:\windows\fonts'

font = ImageFont.truetype(os.path.join(font_path, 'simsun.ttc'), 30)

Image.new?

import os

from PIL import ImageDraw, ImageFont

font_path = r'c:\windows\fonts'

font = ImageFont.truetype(os.path.join(font_path, 'simsun.ttc'), 40)

im_new = Image.new("RGBA", (400, 400), 'white')

pic = ImageDraw.Draw(im_new)

pic.text((20, 30), 'lataku', fill='black', font=font)

pic.text((150, 150), 'luffy', fill='red')

im_new.save("lataku_luffy.png")

案例: mini照片管理系统

class ImageSystem:

"""照片管理系统"""

# def __init__(self, from_path, to_path):

# self.from_path = from_path

# self.to_path = to_path

def __init__(self, source_dir, target_dir):

self.source_dir = source_dir

self.target_dir = target_dir

def thumbnail_i(self, filename, percent=0.5):

"""缩略图"""

# 打开一个jpg图片, 注意路径为当前:

im = Image.open(filename)

print(im.format, im.size, im.mode)

w, h = im.size

print("尺寸: %s x %s" % (w, h))

# 缩放到50%

im.thumbnail((int(w*percent), int(h*percent)))

print("缩略图尺寸: %s X %s" % (int(w*percent), int(h*percent)))

# 保存缩略图

im.save(filename + '-thumnail.jpg', 'jpeg')

def thumbnail_all(self, percent=0.5):

"""

TODO: 循环 source_dir, 找到每一个图片文件, 生成缩略图效果

"""

if filename:

# 打开一个jpg图片, 注意路径为当前:

im = Image.open(filename)

print(im.format, im.size, im.mode)

w, h = im.size

print("尺寸: %s x %s" % (w, h))

# 缩放到50%

im.thumbnail((int(w*percent), int(h*percent)))

print("缩略图尺寸: %s X %s" % (int(w*percent), int(h*percent)))

# 保存缩略图

im.save(filename + '-thumnail.jpg', 'jpeg')

else:

# TODO: 循环 source_dir, 找到每一个图片文件, 生成缩略图效果

pass

def resize(self, h_ratio, w_ratio):

"""调整大小"""

pass

def rotate(self, angle, isMirror=False):

"""图像旋转, 角度(angle), 镜像(Mirror)"""

pass

def add_logo(self):

"""添加logo"""

pass

def new_image(self, words, postion, font, color):

"""新建图像,添加字体 指定位置"""

pass

项目: 51备忘录v0.38

上传头像, 自动生成缩略图

添加logo

def export_doc():

"""导出word图片, 包含图片, 添加水印或者logo"""

pass

class MemoAdmin:

pass

class ImageSystem:

pass

# sys.argv[]

本章小结

时间

邮件

图像

很多第三方的库

官方的文档,概览和教程

尝试实现小的功能,封装成函数,最后是个类

用类组成自己的工具包,应用到其他项目

不用死记硬背每一个方法,大致知道名字和功能就ok

数据:增删改查

函数:输入,算法,输出

第三模块第二次作业总结

能够使用目前学习的几个第三方API来书写一个基础的满足需求的类(功能性会不太强大)

作业过程基本上使用jupyter notebook 按照 简单的判断的方式完成 → 写成 函数 → 再整合到包, 使用vscode进行测试

异常判断的能力不足,代码不够熟练, 还没能够从提示错误的位置得出bug的大概方向,使用print来查看代码出错的位置从而实现功能模块的使用

图片处理模块没有严格按照作业的要求而是根据一些小需求达成了一个批量的图片处理功能

完成代码编写的能力弱, 没有能够在很短的时间内将需求完成,耗费了很多的时间在第三方搜索上

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值