欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用python如何對(duì)圖片進(jìn)行壓縮

 更新時(shí)間:2022年11月29日 10:32:20   作者:Mabel-mql  
這篇文章主要介紹了使用python如何對(duì)圖片進(jìn)行壓縮,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

python對(duì)圖片進(jìn)行壓縮

簡(jiǎn)單說(shuō)明

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

使用工具

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

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

實(shí)現(xiàn)過程

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

相關(guān)實(shí)現(xiàn)代碼

'''
實(shí)現(xiàn)圖片壓縮
1.保持圖片大小比例不變
2.使用Image里面的resize進(jìn)行

'''

from PIL import Image
import os

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

結(jié)果截圖

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

在這里插入圖片描述

2. 壓縮后大小為165*144

在這里插入圖片描述

一鍵實(shí)現(xiàn)圖像壓縮和圖像處理

入門了解1.顏色

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

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

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

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

入門了解 2. 像素

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

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

用Pillow處理圖像

Pillow是由從著名的Python圖像處理庫(kù)PIL發(fā)展出來(lái)的一個(gè)分支,通過Pillow可以實(shí)現(xiàn)圖像壓縮和圖像處理等各種操作。可以使用下面的命令來(lái)安裝Pillow。

pip install pillow

Pillow中最為重要的是Image類,可以通過Image模塊的open函數(shù)來(lái)讀取圖像并獲得Image類型的對(duì)象。

1. 讀取和顯示圖像

? ?from PIL import Image

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

2. 剪裁圖像

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

3. 生成縮略圖

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

4. 縮放和黏貼圖像

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

5. 旋轉(zhuǎn)和翻轉(zhuǎn)

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

6. 操作像素

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

7. 濾鏡效果

? ?from PIL import ImageFilter

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

使用Pillow繪圖

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

完整的代碼如下所示。

import random

from PIL import Image, ImageDraw, ImageFont


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


width, height = 800, 600
# 創(chuàng)建一個(gè)800*600的圖像,背景色為白色
image = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255))
# 創(chuàng)建一個(gè)ImageDraw對(duì)象
drawer = ImageDraw.Draw(image)
# 通過指定字體和大小獲得ImageFont對(duì)象
font = ImageFont.truetype('Kongxin.ttf', 32)
# 通過ImageDraw對(duì)象的text方法繪制文字
drawer.text((300, 50), 'Hello, world!', fill=(255, 0, 0), font=font)
# 通過ImageDraw對(duì)象的line方法繪制兩條對(duì)角直線
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對(duì)象的rectangle方法繪制矩形
drawer.rectangle(xy, outline=(255, 0, 0), width=2)
# 通過ImageDraw對(duì)象的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')

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

使用Python語(yǔ)言做開發(fā),除了可以用Pillow來(lái)處理圖像外,還可以使用更為強(qiáng)大的OpenCV庫(kù)來(lái)完成圖形圖像的處理,OpenCV(Open Source Computer Vision Library)是一個(gè)跨平臺(tái)的計(jì)算機(jī)視覺庫(kù),可以用來(lái)開發(fā)實(shí)時(shí)圖像處理、計(jì)算機(jī)視覺和模式識(shí)別程序。

在我們的日常工作中,有很多繁瑣乏味的任務(wù)其實(shí)都可以通過Python程序來(lái)處理,編程的目的就是讓計(jì)算機(jī)幫助我們解決問題,減少重復(fù)乏味的勞動(dòng)。通過本章節(jié)的學(xué)習(xí),相信大家已經(jīng)感受到了使用Python程序繪圖P圖的樂趣,其實(shí)Python能做的事情還遠(yuǎn)不止這些,繼續(xù)你的學(xué)習(xí)吧。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python3中關(guān)于cookie的創(chuàng)建與保存

    Python3中關(guān)于cookie的創(chuàng)建與保存

    今天小編就為大家分享一篇關(guān)于Python3中關(guān)于cookie的創(chuàng)建與保存的文章,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • 一文帶你搞懂Python上下文管理器

    一文帶你搞懂Python上下文管理器

    這篇文章主要為大家介紹了Python上下文管理器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • python清除字符串里非字母字符的方法

    python清除字符串里非字母字符的方法

    這篇文章主要介紹了python清除字符串里非字母字符的方法,涉及Python字符串正則替換操作的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • python多線程比單線程效率低的原因及其解決方案

    python多線程比單線程效率低的原因及其解決方案

    這篇文章主要介紹了python多線程比單線程效率低的原因及其解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • pandas中read_csv、rolling、expanding用法詳解

    pandas中read_csv、rolling、expanding用法詳解

    這篇文章主要介紹了pandas中read_csv、rolling、expanding用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-04-04
  • python實(shí)現(xiàn)圖片轉(zhuǎn)字符小工具

    python實(shí)現(xiàn)圖片轉(zhuǎn)字符小工具

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)圖片轉(zhuǎn)字符小工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Python?中?key?參數(shù)的含義及用法小結(jié)

    Python?中?key?參數(shù)的含義及用法小結(jié)

    我們?cè)谑褂?sorted()?或?map()?函數(shù)的時(shí)候,都會(huì)看到里面有一個(gè)?key?參數(shù),其實(shí)這個(gè)?key?參數(shù)也存在于其他內(nèi)置函數(shù)中(例如?min()、max()?等),那么我們今天就來(lái)了解一下?key?參數(shù)的含義以及用途吧,需要的朋友可以參考下
    2023-12-12
  • Pandas.DataFrame行和列的轉(zhuǎn)置的實(shí)現(xiàn)

    Pandas.DataFrame行和列的轉(zhuǎn)置的實(shí)現(xiàn)

    本文主要介紹了Pandas.DataFrame行和列的轉(zhuǎn)置的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python中將兩個(gè)或多個(gè)list合成一個(gè)list的方法小結(jié)

    Python中將兩個(gè)或多個(gè)list合成一個(gè)list的方法小結(jié)

    python中,list這種數(shù)據(jù)結(jié)構(gòu)很常用到,如果兩個(gè)或者多個(gè)list結(jié)構(gòu)相同,內(nèi)容類型相同,我們通常會(huì)將兩個(gè)或者多個(gè)list合并成一個(gè),這樣我們?cè)傺h(huán)遍歷的時(shí)候就可以一次性處理掉了
    2019-05-05
  • 基于Python制作一個(gè)文本翻譯器

    基于Python制作一個(gè)文本翻譯器

    translate非標(biāo)準(zhǔn)庫(kù)是python中可以實(shí)現(xiàn)對(duì)多種語(yǔ)言進(jìn)行互相翻譯的庫(kù),本文就將利用這個(gè)庫(kù)制作一個(gè)文本翻譯器,實(shí)現(xiàn)中譯英的功能,需要的可以參考一下
    2022-04-04

最新評(píng)論