1 说明:
=====
1.1 学习python保真修改图片大小。
1.2 学习python的PIL设置png图片的背景设置为透明色。
1.3 学习pygame的图片围点旋转。
1.4 环境:python3.8+pygame 1.9.6+微软编辑器vscode+深度操作系统deepin-linux。
1.5 图片:来源今日头条正版免费图库。
林黛玉:若有所思,静心思考
2 效果:
=====
3 代码:
=====
3.1 pic-size.py代码:先把下载下来的图片进行大小设置,太大不好。
# -*- coding: utf-8 -*-#不失真的图片修改:放大和缩小#第1步:导入模块from PIL import Image#第2步:定义函数def ResizeImage(filein, fileout, width, height, type): img = Image.open(filein) out = img.resize((width, height),Image.ANTIALIAS) out.save(fileout, type)#第3步:图片路径和参数#需要修改的图片和路径filein = '/home/xgj/Desktop/pygame-png/teacher.jpeg'#生成图片和路径fileout = '/home/xgj/Desktop/pygame-png/teacher1.jpeg'#需要修改的宽和高width = 300height = 300typepic = 'png'#第4步:main调用函数if __name__ == "__main__": ResizeImage(filein, fileout, width, height, typepic)
3.2 png-bg.py代码:设置png图片的背景颜色为透明的。
#第1步:代码来源#第2步:模块导入import osfrom PIL import Image #第3步:类定义:背景颜色转换class Transcolor(): #初始化 def __init__(self): self.color_map = { 'white': (255, 255, 255, 0), 'black': (0, 0, 0, 0), } #步骤或者进程 def process(self, image_file, old_bk, new_bk, text_color): img = Image.open(image_file).convert("RGBA") datas = img.getdata() newData = [] for item in datas: if self.is_around(item, old_bk): newData.append(new_bk) else: newData.append(text_color if text_color else item) img.putdata(newData) return img #背景颜色透明化:注意只能对背景颜色为白色的进行类似抠图一样的设置 def transparent(self, image_file, bk_color='white', text_color=None): #透明化 bk = self.formulate(bk_color) text_color = self.formulate(text_color) if text_color else None return self.process(image_file, bk, (0, 0, 0, 0), text_color) def is_around(self, color1, color2): for i in range(3): if abs(color1[i] - color2[i]) > 30: return False return True def formulate(self, var): #格式检查 if var in self.color_map.keys(): return self.color_map[var] for n, i in enumerate(var): if i < 0 or i > 255 or n >= 4: print('Error:请输入white|black|phote_w|(220,220,220,0)RGBA形式') exit(1) return var #第4步:main调用类函数if __name__ == "__main__": t = Transcolor() #路径文件夹 photo_dir = '/home/xgj/Desktop/pygame-png/pic' for i in os.listdir(photo_dir): if os.path.splitext(i)[1].lower() in ['.jgp', '.png', '.jpeg', '.bmp']: path = os.path.join(photo_dir, i) #注意生成的文件:比如xxx.jpg.png,建议重新定义:xxxnew.png t.transparent(path).save(path + '.png')
3.3 pygame的图片围点旋转的代码:
#第1步:模块导入import pygameimport sysfrom pygame.locals import * #第2步:颜色定义BLACK= 0, 0, 0RED=255,0,0GREEN=0,255,0#第3步:窗口初始化pygame.init()#窗口大小SIZE = WIDTH, HEIGHT = 1800, 1000#定义屏幕和窗口可调节screen = pygame.display.set_mode(SIZE,RESIZABLE, 32)#第4步:加载图片pngleaf = pygame.image.load("/home/xgj/Desktop/pygame-png/leaf.png")leafRect = leaf.get_rect()leafRect = leafRect.move(int(WIDTH/ 2), int(HEIGHT / 2))#初始化定义角度angle = 1#游戏时钟定义clock = pygame.time.Clock()#第5步:循环定义while True: #退出设置 for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() # 旋转图片(注意:这里是一个新变量,存储旋转后的图片) newLeaf = pygame.transform.rotate(leaf, angle) # 校正旋转图片的中心点 newRect = newLeaf.get_rect(center=leafRect.center) angle += 1 screen.fill(BLACK) # 这里要用newRect区域,绘制图象 screen.blit(newLeaf, newRect) pygame.draw.rect(screen, RED, leafRect, 1) pygame.draw.rect(screen, GREEN, newRect, 1) pygame.display.update() clock.tick(100)
4 图片:如下:
5 小结:
======
5.1 png图片是pygame游戏设置的主要图片格式,建议设置背景颜色透明。
5.2 PNG:便携式网络图形(外语全称:Portable Network Graphics),是网上接受的最新图像文件格式。
5.3 与jpg区别:
png即可移植网络图形格式,也是一种位图文件存储格式,可以进行无损压缩。
而jpg是我们最常见的图片格式了,图片占用存储较少,但是也牺牲了图片质量。