日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

使用python如何對圖片進行壓縮_python

作者:Mabel-mql ? 更新時間: 2022-12-26 編程語言

python對圖片進行壓縮

簡單說明

對于圖片,強行被定義高和寬會變形,我們希望圖片被改變大小后,比例保持不變,完成對圖片的壓縮。

使用工具

1.pillow : pip install pillow -i https://pypi.douban.com/simple

2. os : 連接文件,并獲取文件夾下的文件名

實現過程

  • 獲取picture文件下的相關圖片的路徑,將路徑放到列表里面進行存儲
  • 使用Image模塊,循環遍歷所有路徑圖片,讀取圖片的大小。
  • 定義縮小后的圖片寬度大小,并根據原圖比例計算壓縮后圖像的高度
  • 使用resize函數改變尺寸,并使用Image.ANTIALIAS保持圖片的品質.
  • 保存壓縮好的圖片到新的文件夾

相關實現代碼

'''
實現圖片壓縮
1.保持圖片大小比例不變
2.使用Image里面的resize進行

'''

from PIL import Image
import os

#獲取文件夾里面的圖片
path_list=['pictures'+"\\"+i for i in os.listdir('pictures')]
# print(path_list)
#循環圖片路徑,依次對圖片進行壓縮
for path in path_list:
    im = Image.open(path)
    (x, y) = im.size  # 讀取圖片尺寸(像素)
    x_1 = 165  # 定義縮小后的標準寬度
    y_1 = int(y * x_1 / x)  # 計算縮小后的高度
    out = im.resize((x_1, y_1), Image.ANTIALIAS)  # 改變尺寸,保持圖片高品質
    #判斷圖片的通道模式,若圖片在RGBA模式下,需先將其轉變為RGB模式
    if out.mode=='RGBA':
        #轉化為rgb格式
        out=out.convert('RGB')
       #最后保存為jpg格式的圖片,這里因為圖片本身為jpg所以后綴不更改
    out.save('pictures_new\\{}'.format(path.split("\\")[-1]))

結果截圖

1. 原圖(其中一張)----分辨率大小為3392*3392

在這里插入圖片描述

2. 壓縮后大小為165*144

在這里插入圖片描述

一鍵實現圖像壓縮和圖像處理

入門了解1.顏色

如果你有使用顏料畫畫的經歷,那么一定知道混合紅、黃、藍三種顏料可以得到其他的顏色,事實上這三種顏色就是美術中的三原色,它們是不能再分解的基本顏色。

在計算機中,我們可以將紅、綠、藍三種色光以不同的比例疊加來組合成其他的顏色,因此這三種顏色就是色光三原色。

在計算機系統中,我們通常會將一個顏色表示為一個RGB值或RGBA值(其中的A表示Alpha通道,它決定了透過這個圖像的像素,也就是透明度)。

名稱 RGB值 名稱 RGB值
White(白) (255, 255, 255) Red(紅) (255, 0, 0)
Green(綠) (0, 255, 0) Blue(藍) (0, 0, 255)
Gray(灰) (128, 128, 128) Yellow(黃) (255, 255, 0)
Black(黑) (0, 0, 0) Purple(紫) (128, 0, 128)

入門了解 2. 像素

對于一個由數字序列表示的圖像來說,最小的單位就是圖像上單一顏色的小方格,這些小方塊都有一個明確的位置和被分配的色彩數值,而這些一小方格的顏色和位置決定了該圖像最終呈現出來的樣子,它們是不可分割的單位,我們通常稱之為像素(pixel)。

每一個圖像都包含了一定量的像素,這些像素決定圖像在屏幕上所呈現的大小,大家如果愛好拍照或者自拍,對像素這個詞就不會陌生。

用Pillow處理圖像

Pillow是由從著名的Python圖像處理庫PIL發展出來的一個分支,通過Pillow可以實現圖像壓縮和圖像處理等各種操作。可以使用下面的命令來安裝Pillow。

pip install pillow

Pillow中最為重要的是Image類,可以通過Image模塊的open函數來讀取圖像并獲得Image類型的對象。

1. 讀取和顯示圖像

? ?from PIL import Image

? ?# 讀取圖像獲得Image對象
? ?image = Image.open('guido.jpg')
? ?# 通過Image對象的format屬性獲得圖像的格式
? ?print(image.format) # JPEG
? ?# 通過Image對象的size屬性獲得圖像的尺寸
? ?print(image.size) ? # (500, 750)
? ?# 通過Image對象的mode屬性獲取圖像的模式
? ?print(image.mode) ? # RGB
? ?# 通過Image對象的show方法顯示圖像
? ?image.show()

2. 剪裁圖像

? ?# 通過Image對象的crop方法指定剪裁區域剪裁圖像
? ?image.crop((80, 20, 310, 360)).show()

3. 生成縮略圖

? ?# 通過Image對象的thumbnail方法生成指定尺寸的縮略圖
? ?image.thumbnail((128, 128))
? ?image.show()

4. 縮放和黏貼圖像

? ?# 讀取駱昊的照片獲得Image對象
? ?luohao_image = Image.open('luohao.png')
? ?# 讀取吉多的照片獲得Image對象
? ?guido_image = Image.open('guido.jpg')
? ?# 從吉多的照片上剪裁出吉多的頭
? ?guido_head = guido_image.crop((80, 20, 310, 360))
? ?width, height = guido_head.size
? ?# 使用Image對象的resize方法修改圖像的尺寸
? ?# 使用Image對象的paste方法將吉多的頭粘貼到駱昊的照片上
? ?luohao_image.paste(guido_head.resize((int(width / 1.5), int(height / 1.5))), (172, 40))
? ?luohao_image.show()

5. 旋轉和翻轉

? ?image = Image.open('guido.jpg')
? ?# 使用Image對象的rotate方法實現圖像的旋轉
? ?image.rotate(45).show()
? ?# 使用Image對象的transpose方法實現圖像翻轉
? ?# Image.FLIP_LEFT_RIGHT - 水平翻轉
? ?# Image.FLIP_TOP_BOTTOM - 垂直翻轉
? ?image.transpose(Image.FLIP_TOP_BOTTOM).show()

6. 操作像素

? ?for x in range(80, 310):
? ? ? ?for y in range(20, 360):
? ? ? ? ? ?# 通過Image對象的putpixel方法修改圖像指定像素點
? ? ? ? ? ?image.putpixel((x, y), (128, 128, 128))
? ?image.show()

7. 濾鏡效果

? ?from PIL import ImageFilter

? ?# 使用Image對象的filter方法對圖像進行濾鏡處理
? ?# ImageFilter模塊包含了諸多預設的濾鏡也可以自定義濾鏡
? ?image.filter(ImageFilter.CONTOUR).show()

使用Pillow繪圖

Pillow中有一個名為ImageDraw的模塊,該模塊的Draw函數會返回一個ImageDraw對象,通過ImageDraw對象的arc、line、rectangle、ellipse、polygon等方法,可以在圖像上繪制出圓弧、線條、矩形、橢圓、多邊形等形狀,也可以通過該對象的text方法在圖像上添加文字。

完整的代碼如下所示。

import random

from PIL import Image, ImageDraw, ImageFont


def random_color():
? ? """生成隨機顏色"""
? ? red = random.randint(0, 255)
? ? green = random.randint(0, 255)
? ? blue = random.randint(0, 255)
? ? return red, green, blue


width, height = 800, 600
# 創建一個800*600的圖像,背景色為白色
image = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255))
# 創建一個ImageDraw對象
drawer = ImageDraw.Draw(image)
# 通過指定字體和大小獲得ImageFont對象
font = ImageFont.truetype('Kongxin.ttf', 32)
# 通過ImageDraw對象的text方法繪制文字
drawer.text((300, 50), 'Hello, world!', fill=(255, 0, 0), font=font)
# 通過ImageDraw對象的line方法繪制兩條對角直線
drawer.line((0, 0, width, height), fill=(0, 0, 255), width=2)
drawer.line((width, 0, 0, height), fill=(0, 0, 255), width=2)
xy = width // 2 - 60, height // 2 - 60, width // 2 + 60, height // 2 + 60
# 通過ImageDraw對象的rectangle方法繪制矩形
drawer.rectangle(xy, outline=(255, 0, 0), width=2)
# 通過ImageDraw對象的ellipse方法繪制橢圓
for i in range(4):
? ? left, top, right, bottom = 150 + i * 120, 220, 310 + i * 120, 380
? ? drawer.ellipse((left, top, right, bottom), outline=random_color(), width=8)
# 顯示圖像
image.show()
# 保存圖像
image.save('result.png')

注意:上面代碼中使用的字體文件需要根據自己準備,可以選擇自己喜歡的字體文件并放置在代碼目錄下。

使用Python語言做開發,除了可以用Pillow來處理圖像外,還可以使用更為強大的OpenCV庫來完成圖形圖像的處理,OpenCV(Open Source Computer Vision Library)是一個跨平臺的計算機視覺庫,可以用來開發實時圖像處理、計算機視覺和模式識別程序。

在我們的日常工作中,有很多繁瑣乏味的任務其實都可以通過Python程序來處理,編程的目的就是讓計算機幫助我們解決問題,減少重復乏味的勞動。通過本章節的學習,相信大家已經感受到了使用Python程序繪圖P圖的樂趣,其實Python能做的事情還遠不止這些,繼續你的學習吧。

原文鏈接:https://blog.csdn.net/Rebacca122222/article/details/124918529

欄目分類
最近更新