图片处理
补充,关于draw.text 中文字符
怎么找到字体文件,位置:C:\\WINDOWS\\Fonts\\,
找到需要的中文字体,右键-属性 就可以看到字体的文件名,比如,华文行楷 的文件名就是:STXINGKA.TTF
from PIL import Image, ImageDraw, ImageFont im02 = Image.open("images/sushiplate.jpg") im02 = Image.new('RGB',(1000, 500), 0) draw = ImageDraw.Draw(im02) ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\SIMYOU.TTF", 20) draw.text((30,30), u"Python图像处理库PIL从入门到精通",font = ft, fill = 'red') ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\SIMYOU.TTF", 40) draw.text((30,100), "Python图像处理库PIL从入门到精通",font = ft, fill = 'green') ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\SIMYOU.TTF", 60) draw.text((30,200), "Python图像处理库PIL从入门到精通",font = ft, fill = 'blue') ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\SIMLI.TTF", 40) draw.text((30,300), "Python图像处理库PIL从入门到精通",font = ft, fill = 'red') ft = ImageFont.truetype("C:/WINDOWS/Fonts/STXINGKA.TTF", 40) draw.text((30,400), "Python图像处理库PIL从入门到精通",font = ft, fill = 'yellow') im02.show()
一、# pillow模块,我的电脑不需要自己安装呀,如果要安装的话就:pip install pillow # pillow简写:PIL
# pillow模块,我的电脑不需要自己安装呀,如果要安装的话就:pip install pillow # pillow简写:PIL import PIL.ImageColor # 颜色 import PIL.Image # 图像 import PIL.ImageDraw # 绘图 import PIL.ImageFont # 字体 import PIL.ImageFilter # 滤镜 import PIL.ImageEnhance # 图像增强 import PIL.ImageSequence # 处理gif图像 import os print(PIL.ImageColor.getcolor('red', 'RGBA')) # 模式可以是RGB(jpg格式) RGBA(png格式) CMYK # (255, 0, 0, 255) # 1、 新建图片 img = PIL.Image.new('RGBA', (800, 500), (255, 255, 0, 255)) # 黄色 创建一张图片 img = img.resize((400, 210)) # 改变尺寸,注意:1、将返回一张新的图片,2,传递的参数是一个tuple img = img.transpose(PIL.Image.FLIP_LEFT_RIGHT) # 左右翻转 img = img.transpose(PIL.Image.FLIP_TOP_BOTTOM) # 上下翻转 img = img.rotate(45, expand=False) # 旋转,将返回一个新的图像, 第二个参数:是否放大图像填充旋转后的空白,png 和jpg效果不一样 img.save('112.png') # 如果是RGBA模式就要保存为png print('-------------------------------------') # 2、 打开现有图片 img = PIL.Image.open('112.png') # 打开一张照片 print(img) # <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1920x1080 at 0x221A64C3670> print(img.size) # (1920, 1080) print(img.width) # 1920 print(img.height) # 1080 print(img.filename) # 001.jpg print(img.format) # JPEG img1 = img.copy() # 复制 newImg = img.crop((10, 8, 300, 200)) # 裁剪图片 # (100, 80, 300, 200)是一个矩阵,100,80是左上角,300 200 是右下角,(包括左上角的点但是不包括右下角的点) img.paste(newImg) # 从左上角这个位置粘贴 img.paste(newImg, (100, 100)) # 从(100,100)这个位置粘贴,第二次粘贴 newImg.save('111.png') # 保存(另存为) img.close() # 关闭文件 # 3、更改单个像素 im = PIL.Image.new('RGBA', (200, 200), (0, 0, 0, 255)) # 黑色不透明 print(im.getpixel((0, 0))) # (0, 0, 0, 0) 对应R, G, B, A for x in range(100): for y in range(50): im.putpixel((x, y), (255, 210, 210, 255)) # 用粉红色填充上半部分 # 4、绘制图形,注意,不像是ps的图层混合模式,每一次绘制都会把下面的图像抹去 draw = PIL.ImageDraw.ImageDraw(im) # 点 for y in range(10): draw.point((50, y), (255, 0, 0, 255)) # 画10个点 # 线 draw.line(((0, 0), (10, 20), (20, 10)), (255, 255, 255, 255), width=2) for i in range(100, 200, 10): draw.line([(i, 0), (200, i - 100)], fill='green') # 矩形 draw.rectangle((30, 40, 70, 80), (128, 128, 0, 128), outline=(0, 0, 0, 255), width=2) # 半透明矩形 # 椭圆(高宽一样就是圆) draw.ellipse((10, 10, 20, 30), (255, 255, 0, 255)) # 多边形 draw.polygon(((57, 87), (79, 62), (94, 85), (120, 90), (103, 113)), fill='brown') # 每个坐标都是多边形的角 # 文本 draw.text((20, 150), 'Hello', fill='purple') fontsFolder = 'FONT_FOLDER' # e.g. ‘/Library/Fonts’ print(fontsFolder) arialFont = PIL.ImageFont.truetype(os.path.join(fontsFolder, 'arial.ttf'), 32) print(arialFont.path) draw.text((100, 150), 'Howdy', fill='gray', font=arialFont) # im.save('123.jpg') im.thumbnail((150, 150)) # 略缩图 注意,这个方法是‘原地操作’,返回值是None,没有返回新的Image # im.show() r, g, b, a = im.split() # 分离通道 # r.show() im = PIL.Image.merge('RGBA', (r, g, b, a)) # 合并通道,注意,这是一个模块方法,相当于类方法,或静态方法 im = im.convert('RGB') # 将RGBA 转换成RGB # im.show() # 滤镜 im = im.filter(PIL.ImageFilter.BLUR) # 模糊 # filter方法可以将一些过滤器操作应用于原始图像,比如模糊操作,查找边、角点操作等。filter是过滤器函数, # 在PIL.ImageFilter函数中定义了大量内置的filter函数,比如BLUR(模糊操作),GaussianBlur(高斯模糊), # MedianFilter(中值过滤器),FIND_EDGES(查找边)等 # im.show() # https://www.cnblogs.com/Young-shi/p/11478732.html # 图像增强 im = PIL.Image.open('001.jpg') # 打开一张照片 brightness = PIL.ImageEnhance.Brightness(im) # brightness = PIL.ImageEnhance.Brightness(im) im_brightness = brightness.enhance(1.5) im_brightness.show() # 图像变亮了 im_contrast = PIL.ImageEnhance.Contrast(im) im_contrast.enhance(1.5) # <PIL.Image.Image image mode=RGB size=296x299 at 0x7F62AE271AC8> im_contrast.enhance(2.5).show() # 增加饱合度 # 处理gif图像的每一帧 # 下面的代码可以遍历gif图像中的所有帧,并分别保存为图像 gif = PIL.Image.open("pipixia.gif") for i, frame in enumerate(PIL.ImageSequence.Iterator(gif),1): # enumerate:对迭代器进行包装,可以返回索引和值。参数1表示并非从0开始,而是从1开始 if frame.mode == 'JPEG': frame.save("%d.jpg" %i) else: frame.save("%d.png" % i) # 除了上面使用迭代器的方式以外,还可以一帧一帧读取gif,比如下面的代码: index = 0 while 1: try: gif.seek(index) gif.save("%d.%s" %(index,'jpg' if gif.mode == 'JPEG' else 'png')) index += 1 except EOFError: print("Reach the end of gif sequence!") break # 上面的代码在读取到gif的最后一帧之后,会throw 一个 EOFError,所以我们只要捕获这个异常就可以了。

浙公网安备 33010602011771号