日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python处理图像文件

發布時間:2024/1/1 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python处理图像文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python處理圖像文件

  • 安裝pillow模塊
pip install pillow from PIL import ImageColor

1.pillow模塊的RGBA

在pillow模塊中,RGBA分別代表Red紅色、Green綠色、Blue藍色和Alpha透明度。這4個數值組成元組,范圍都在0~255之間,Alpha的值越小,透明度越高。

1.1 getrgb()

getrgb()函數可以將顏色符號或字符串轉成元組:
(r, g, b) = getrgb(color)

1.2 getcolor()

(r, g, b) = getcolor(color, “mode”) # 返回色彩元組
mode為”RGBA" --> 返回RGBA元組
mode為”RGB" --> 返回RGB元組
mode為其他 --> 返回整數值

# author:mlnt # createdate:2022/8/19 from PIL import ImageColor""" 1.getrgb() getrgb()函數可以將顏色符號或字符串轉成元組: (r, g, b) = getrgb(color) """ print(ImageColor.getrgb('#0000ff')) # (0, 0, 255) print(ImageColor.getrgb("rgb(0, 255, 255)")) # (0, 255, 255) print(ImageColor.getrgb('blue')) # (0, 0, 255) print(ImageColor.getrgb('rgb(0%, 50%, 100%)')) # (0, 128, 255)# 2.getcolor() # (r, g, b) = getcolor(color, "mode") # 返回色彩元組 """ mode為”RGBA" --> 返回RGBA元組 mode為”RGB" --> 返回RGB元組 mode為其他 --> 返回整數值 """ print(ImageColor.getcolor('#0000ff', 'RGB')) # (0, 0, 255) print(ImageColor.getcolor("rgb(0, 255, 255)", 'RGBA')) # (0, 255, 255, 255) print(ImageColor.getcolor('blue', 'RGB')) # (0, 0, 255) print(ImageColor.getcolor('rgb(0%, 50%, 100%)', 'RGBA')) # (0, 128, 255, 255)

2. pillow模塊的盒子元組

最左上角的像素的(x,y)是(0,0),x軸像素往右遞增,y軸像素往下遞增。
盒子元組的參數是(left,top,right,bottom):
left:盒子左上角的x軸坐標;
top:盒子左上角的y軸坐標;
right:盒子右下角的x軸坐標;
bottom:盒子右下角的y軸坐標

3. 圖像的基本操作

  • open():打開圖片
  • size屬性:獲取圖片寬高
  • filename屬性:獲取圖片源文件名稱
  • format屬性:獲取圖像文件格式(后綴)
  • format_description屬性:獲取詳細的文件格式描述
  • save():存儲文件,可將文件另存為其他圖片格式
  • new(mode, size, color=0):創建新的圖像對象
# author:mlnt # createdate:2022/8/19from PIL import Image# 1.打開圖片 image = Image.open('gailun.jpeg') # 創建pillow對象 print(type(image)) # <class 'PIL.JpegImagePlugin.JpegImageFile'># 2.獲取圖像的大小屬性 width, height = image.size # 獲得圖像的寬度和高度 print(f'width: {width}, height: {height}') # width: 682, height: 384# 3.獲取圖像文件名 print(f'filename: {image.filename}') # filename: gailun.jpeg# 4.獲取圖像的文件格式 print(f'擴展名: {image.format}') # 擴展名: JPEG print(f'文件格式描述:{image.format_description}') # 文件格式描述:JPEG (ISO 10918)# 5.存儲文件 # 另存為png格式文件 image.save('gailun.png')# 6.創建新的圖像對象 """ 使用new()方法創建新的圖像對象,語法格式: new((mode, size, color=0) mode:RGBA(建立png文件),RGB(創建jpg文件) size的參數為元組 color預設為黑色 """ picture = Image.new(mode="RGB", size=(100, 200), color='SteelBlue') picture.save(fp='newPicture.jpg')

newPicture.jpg:

4. 圖像的編輯

4.1 更改圖像大小–resize()

resize((width, height), Image.BILINEAR)
Image.NEAREST:最低質量
Image.ANTIALIAS:最高質量
Image.BISCUBIC:三次方取樣法

# author:mlnt # createdate:2022/8/19# 1.更改圖像大小resize() """ resize((width, height), Image.BILINEAR) Image.NEAREST:最低質量 Image.ANTIALIAS:最高質量 Image.BISCUBIC:三次方取樣法 """ from PIL import Image# 打開圖像 picture = Image.open('newPicture.jpg') # 獲取大小屬性 width, height = picture.size newPict1 = picture.resize((width * 2, height)) # 寬度為原來的2倍 newPict1.save('2width.jpg') newPict2 = picture.resize((width, height * 2)) # 高度為原來的2倍 newPict2.save('2height.jpg')

4.2 圖像旋轉–rotate()

# author:mlnt # createdate:2022/8/19""" rotate()方法可以逆時針旋轉圖像 如果旋轉90度或270度:寬高變化,圖像本身比率不變,多的部分以黑色圖像替代。 旋轉其他角度則圖像維持不變。 """ from PIL import Imagepicture = Image.open('gailun.jpeg') picture.rotate(90).save('r90.jpg') # 旋轉90度 picture.rotate(180).save('r180.jpg') # 旋轉180度 picture.rotate(270).save('r270.jpg') # 旋轉270度# 增加expand=True參數,將放大圖像,讓整個圖像顯示,多余部分用黑色填滿 picture.rotate(270, expand=True).save('r270_ex.jpg') # 旋轉270度

旋轉90度

旋轉180度

旋轉270度

旋轉270加放大

4.3 圖像翻轉–transpose()

使用**transpose()**方法可以讓圖像翻轉:

  • transpose(Image.Transpose.FLIP_LEFT_RIGHT):左右翻轉
  • transpose(Image.Transpose.FLIP_TOP_BOTTOM):上下翻轉
# author:mlnt # createdate:2022/8/19""" 使用transpose()方法可以讓圖像翻轉 transpose(Image.Transpose.FLIP_LEFT_RIGHT):左右翻轉 transpose(Image.Transpose.FLIP_TOP_BOTTOM):上下翻轉 """from PIL import Imagepicture = Image.open('gailun.jpeg') picture.transpose(Image.Transpose.FLIP_LEFT_RIGHT).save('FLIP_LEFT_RIGHT.jpg') # 左右翻轉 picture.transpose(Image.Transpose.FLIP_TOP_BOTTOM).save('FLIP_TOP_BOTTOM.jpg') # 上下翻轉

左右翻轉:

上下翻轉:

4.4 圖像像素編輯

  • getpixel()方法可以取得圖像某一位置像素的色彩
# author:mlnt # createdate:2022/8/19""" getpixel()方法可以取得圖像某一位置像素的色彩 getpixel((x,y)) """from PIL import ImagenewImage = Image.new('RGBA', (200, 200), 'green') print(newImage.getpixel((100, 100))) # 打印中心點的色彩 newImage.save('newImage1.png') # (0, 128, 0, 255)
  • putpixel()方法可以在圖像的某個位置填入色彩
# author:mlnt # createdate:2022/8/19 """ putpixel()方法可以在圖像的某個位置填入色彩 putpixel((x,y),(r,g,b,a)) """ from PIL import Image from PIL import ImageColornewImage = Image.new('RGBA', (200, 200), 'green') for x in range(50, 151): # x軸區間在50-150for y in range(50, 100): # y軸區間在50-99newImage.putpixel((x, y), (0, 255, 255, 255)) newImage.save('putpixel_test1.png') for x in range(50, 150): # x軸區間在50-149for y in range(90, 120): # y軸區間在90-119newImage.putpixel((x, y), ImageColor.getcolor('Yellow', 'RGBA')) newImage.save('putpixel_test2.png')


4.5 裁切、復制與圖像合成

  • 裁切圖像–crop()
# author:mlnt # createdate:2022/8/19 """ crop()方法裁剪圖像 參數為元組,內容為區間坐標(左,上,右,下) """ from PIL import Imagepicture = Image.open('yase.jpeg') crop_pic = picture.crop((30, 20, 450, 360)) # 裁剪區間 crop_pic.save('crop_pic.jpg')

  • 復制圖像copy()

    # author:mlnt # createdate:2022/8/19""" copy()方法 """ from PIL import Imagepicture = Image.open('yase.jpeg') copy_pic = picture.copy() # 復制 copy_pic.save('copy_pic.jpg')
  • 圖像合成paste()

paste()方法實現圖像合成:
底圖圖像.paste(插入圖像,(x,y))
(x,y)為圖像插入的位置

# author:mlnt# createdate:2022/8/19"""paste()方法實現圖像合成底圖圖像.paste(插入圖像,(x,y))(x,y)為圖像插入的位置"""from PIL import Imagepic1 = Image.open('gailun.jpeg')pic2 = Image.open('yase.jpeg')crop_pic = pic2.crop((120, 20, 436, 370)) # 裁剪區間pic1.paste(crop_pic, (1, 40))pic1.save('圖像合成.jpg')

  • 將裁剪圖片填滿圖像區間

    # author:mlnt # createdate:2022/8/19 from PIL import Imagepic = Image.open('img.jpeg') crop_pic = pic.crop((20, 20, 80, 80)) # 裁剪區間 crop_width, crop_height = crop_pic.size # 獲得裁切區間的寬高width, height = 440, 440 # 新圖像寬高 newImage = Image.new('RGB', (width, height), 'green') # 創建新圖像 for x in range(10, width-20, crop_width):for y in range(10, height-20, crop_height):newImage.paste(crop_pic, (x, y)) # 合成newImage.save('圖像鋪滿.jpg')

4.6 圖像添加濾鏡

pillow模塊內的ImageFilter模塊中的filter()可以給圖片加上濾鏡效果。此方法的參數意義:

  • BLUR:模糊;
  • CONTOUR:輪廓;
  • DETAIL:細節增強
  • EDGE_ENHANCE:邊緣增強;
  • EDGE_ENHANCE_MORE:深度邊緣增強;
  • EMBOSS:浮雕效果;
  • FIND_EDGES:邊緣信息;
  • SMOOTH:平滑效果;
  • SMOOTH_MORE:深度平滑效果;
  • SHARPEN:銳化效果。
# author:mlnt # createdate:2022/8/20 """ pillow模塊內的ImageFilter模塊中的filter()可以給圖片加上濾鏡效果。此方法的參數意義: BLUR:模糊; CONTOUR:輪廓; DETAIL:細節增強 EDGE_ENHANCE:邊緣增強; EDGE_ENHANCE_MORE:深度邊緣增強; EMBOSS:浮雕效果; FIND_EDGES:邊緣信息; SMOOTH:平滑效果; SMOOTH_MORE:深度平滑效果; SHARPEN:銳化效果。 """ import PIL from PIL import Image from PIL import ImageFilterimage = Image.open('img.jpeg') # 創建pillow對象 # 更改圖像大小 image = image.resize((80, 80), resample=PIL.Image.Resampling.BILINEAR) # image.show() # # 模糊 filter_img = image.filter(ImageFilter.BLUR) # filter_img.show() filter_img.save('img_BLUR.jpg') # 輪廓 filter_img = image.filter(ImageFilter.CONTOUR) filter_img.save('img_CONTOUR.jpg') # 細節增強 # filter_img = image.filter(ImageFilter.DETAIL) # filter_img.save('img_DETAIL.jpg') # 邊緣增強 filter_img = image.filter(ImageFilter.EDGE_ENHANCE) filter_img.save('img_EDGE_ENHANCE.jpg') # 深度邊緣增強 filter_img = image.filter(ImageFilter.EDGE_ENHANCE_MORE) filter_img.save('img_EDGE_ENHANCE_MORE.jpg') # 浮雕效果 filter_img = image.filter(ImageFilter.EMBOSS) filter_img.save('img_EMBOSS.jpg') # 邊緣信息 filter_img = image.filter(ImageFilter.FIND_EDGES) filter_img.save('img_FIND_EDGES.jpg') # 平滑效果 # filter_img = image.filter(ImageFilter.SMOOTH) # filter_img.save('img_SMOOTH.jpg') # 深度平滑效果 # filter_img = image.filter(ImageFilter.SMOOTH_MORE) # filter_img.save('img_SMOOTH_MORE.jpg') # 銳化效果 filter_img = image.filter(ImageFilter.SHARPEN) filter_img.save('img_SHARPEN.jpg')

效果:

4.7 圖像內繪制圖案

pillow模塊內有一個ImageDraw模塊,利用此模塊可以繪制:點(Points)、線(Lines)、矩形(Rectangles)、橢圓(Ellipses)、多邊形(Polygons)

  • 1.繪制點:point([(x1,y1),…(xn,yn)],fill),fill為設置的顏色
  • 2.繪制線條:line([(x1,y1),…(xn,yn)], width, fill) ,width為寬度
  • 3.ellipse()方法繪制圓或橢圓:
    ellipse((left,top,right,bottom), fill, outline),outline為外框顏色
  • 4.rectangle()方法繪制橢圓:rectangle((left,top,right,bottom), fill, outline)
  • 5.polygon()方法繪制多邊形:polygon([(x1,y1),…(xn,yn)], fill, outline)
# author:mlnt # createdate:2022/8/19 """ pillow模塊內有一個ImageDraw模塊,利用此模塊可以繪制: 點(Points)、線(Lines)、矩形(Rectangles)、橢圓(Ellipses)、多邊形(Polygons) """ from PIL import Image, ImageDrawnewImage = Image.new('RGBA', (300, 300), 'green') drawObj = ImageDraw.Draw(newImage)# 1.繪制點 # point([(x1,y1),...(xn,yn)],fill) fill為設置的顏色 for x in range(100, 200, 3):for y in range(100, 200, 3):drawObj.point([(x, y)], fill='orange')# 2.繪制線條 # line([(x1,y1),...(xn,yn)], width,, fill) width為寬度 drawObj.line([(0, 0), (299, 0), (299, 299), (0, 299), (0, 0)], fill='blue') for x in range(150, 300, 10):drawObj.line([(x, 0), (300, x - 150)], fill='yellow')for y in range(150, 300, 10):drawObj.line([(0, y), (y - 150, 300)], fill='yellow')# 繪制矩形 drawObj.rectangle((100, 200, 210, 240), outline='silver')# 繪制圓和橢圓 drawObj.ellipse((20, 10, 280, 290), outline='black') drawObj.ellipse((50, 50, 120, 120), outline='brown') drawObj.ellipse((180, 180, 200, 200), outline='orange')# 繪制多邊形 drawObj.polygon([(150, 120), (100, 100), (120, 100), (150, 120)], fill='Aqua')newImage.save('圖案.png')

4.8 在圖像內添加文字

text((x,y),text,fill,font)
使用其他字體,需調用ImageFont.truetype()方法選用字體,同時設定字號。
使用ImageFont.truetype()前需導入ImageFont模塊:
ImageFont.truetype(字體路徑,字號)

# author:mlnt # createdate:2022/8/19 """ text((x,y),text,fill,font) 使用其他字體,需調用ImageFont.truetype()方法選用字體,同時設定字號。 使用ImageFont.truetype()前需導入ImageFont模塊 text(字體路徑,字號) """ from PIL import Image, ImageDraw, ImageFontnewImage = Image.new('RGBA', (500, 300), 'green') drawObj = ImageDraw.Draw(newImage)strText = 'Hello world' drawObj.text((50, 50), strText, fill='blue') fontInfo = ImageFont.truetype(r'C:\Windows\Fonts\IMPRISHA.TTF', 24) drawObj.text((50, 100), strText, fill='red', font=fontInfo)strText_2 = '天朗氣清,惠風和暢' fontInfo = ImageFont.truetype(r'C:\Windows\Fonts\Muyao.TTF', 28) drawObj.text((50, 180), strText_2, fill='orange', font=fontInfo)strText_3 = '天朗氣清,惠風和暢' fontInfo = ImageFont.truetype(r'C:\Windows\STXINGKA.TTF', 28) drawObj.text((50, 240), strText_2, fill='Brown', font=fontInfo)# 豎排顯示 strText_4 = '玄池嫣韻\n坦蕩\n勤能補拙' # 初始化參數 x = 360 # 橫坐標(左右) y = 20 # 縱坐標(上下) right = 0 # 往右位移量 down = 0 # 往下位移量 w = 300 # 文字寬度 h = 300 # 文字高度 # 設置字體 font = ImageFont.truetype("C:\\Windows\\Fonts\\STXINGKA.TTF", 42) for k, s2 in enumerate(strText_4):if k == 0:box = font.getbbox(s2)w, h = box[2] - box[0], box[3] - box[1] # 獲取第一個文字的寬和高if s2 == "," or s2 == "\n": # 換行識別right = right + wdown = 0continueelse:down = down + hprint("序號-值", k, s2)print("寬-高", w, h)print("位移", right, down)print("坐標", x + right, y + down)drawObj.text((x + right, y + down), s2, (255, 255, 0), font=font) # 設置位置坐標 文字 顏色 字體 newImage.show() newImage.save('寫字.png')


參考:

  • https://www.likecs.com/show-203574770.html
  • https://blog.csdn.net/qq_36874480/article/details/123569375

總結

以上是生活随笔為你收集整理的python处理图像文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。