最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python利用線程生成不同尺寸的縮略圖實(shí)例詳解

 更新時(shí)間:2022年05月19日 08:32:35   作者:while10  
這篇文章主要介紹了python利用線程生成不同尺寸的縮略圖,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

利用線程生成縮略圖;
讀取當(dāng)前路徑下的png文件,在當(dāng)前路徑下生成6464,128128和32*32的縮略圖。

"""
利用線程生成縮略圖
讀取當(dāng)前路徑下的png文件,在當(dāng)前路徑下生成64*64,128*128和32*32的縮略圖
"""
import glob
import os
import threading
from PIL import Image
def generate_thumbnail(infile, size):
    """生成指定圖片文件的縮略圖"""
    file, ext = os.path.splitext(infile)
    file = file[file.rfind('/') + 1:]  # 查找文件名
    outfile = f'{file}_{size[0]}_{size[1]}{ext}'  # 生成縮略圖的文件名
    img = Image.open(infile)
    img.thumbnail(size, Image.ANTIALIAS)  # 進(jìn)行縮略圖  size為元組   Image.ANTIALIAS表示低質(zhì)量
    img.save(outfile)
def main():
    """主函數(shù)"""
    for infile in glob.glob('*.png'):  # 查找當(dāng)前路徑下的png文件
        for size in (32, 64, 128):  # 利用線程生成多個(gè)尺寸的縮略圖
            # 創(chuàng)建并啟動(dòng)線程
            threading.Thread(
                target=generate_thumbnail,
                args=(infile, (size, size))
            ).start()
if __name__ == '__main__':
    main()

補(bǔ)充:python 縮放并裁剪圖片 制作圖片縮略圖

說(shuō)明

現(xiàn)在有一文件夾中存在許多分辨率不同的圖片或文件夾,需要裁剪至指定大小以便作為網(wǎng)頁(yè)中的圖片縮略圖。
cut 函數(shù),將圖片裁剪為指定大小,統(tǒng)一分辨率,縮放后取圖片中間部分,超出的部分直接裁剪掉。
還有一個(gè)函數(shù) cut2,為等比縮放至x或y為定值。

用法

縮放裁剪后的x、y像素值在代碼開始部分更改即可。
默認(rèn)只使用 cut 函數(shù),使用 cut2 函數(shù)時(shí)需在代碼第18-20行更改。

注意:

1.縮放裁剪后會(huì)覆蓋原文件,需要的話,請(qǐng)?jiān)诳s放裁剪前備份圖片。

2.沒有做文件夾驗(yàn)證,請(qǐng)確認(rèn)輸入正確的文件夾路徑,并確保文件夾中只有圖片。

3.多次縮放可能會(huì)使圖片變得模糊,尤其是文字邊緣。

完整代碼

import cv2
import os
import numpy as np
# cut 裁剪后的 xy
target_x = 286
target_y = 203
def get_dir(dir):
?? ?""" 遍歷文件夾下所有的文件名 """
?? ?list1 = os.listdir(dir)
?? ?for l in list1:
?? ??? ?l = f'{dir}/{l}'
?? ??? ?if(os.path.isdir(l)):
?? ??? ??? ?get_dir(l)
?? ??? ?else:
?? ??? ??? ?cut(l)
?? ??? ??? ?# cut2(l,x=800)
?? ??? ??? ?# cut2(l,y=400)
def cut(inputdir = './t.jpg'):
?? ?""" 圖片裁剪 """
?? ?# 裁剪后的文件名為
?? ?# outputdir = inputdir[:-4] + '_over.jpg'
?? ?# 設(shè)置為相同文件名,覆蓋原文件
?? ?outputdir = inputdir
?? ?# img = cv2.imread(inputdir)?? ?# imread讀取不能包含中文文件名
?? ?img = cv2.imdecode(np.fromfile(inputdir, dtype=np.uint8), cv2.IMREAD_UNCHANGED)
? ? # imdecode讀取圖像默BGR通道排列,?
? ? # img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)?? ?# 轉(zhuǎn)換為RGB
?? ?# img.shape:[height,width,channel]
?? ?in_y, in_x = img.shape[:2]
?? ?print(img.shape)
?? ?scale = target_x / target_y
?? ?scale1 = in_x / in_y
?? ?if(scale1 >= scale):
?? ??? ?size = (int(in_x/(in_y/target_y)), target_y)
?? ??? ?# print(1, size)
?? ?elif(scale1 < scale):
?? ??? ?size = (target_x, int(in_y/(in_x/target_x)))
?? ??? ?# print(2, size)
?? ?else:
?? ??? ?size = (target_x, target_y)
?? ??? ?print('error')
?? ?# 縮放到size=(x,y)
?? ?resized = cv2.resize(img, size, interpolation=cv2.INTER_AREA)
?? ?# 展示裁剪后的圖片
?? ?# cv2.imshow('image', resized)
?? ?# cv2.waitKey(0)
?? ?# print('x', resized.shape[1], 'y', resized.shape[0])
?? ?if(resized.shape[1] == target_x):
?? ??? ?# x=target_x
?? ??? ?y0 = resized.shape[0] // 2 - target_y//2
?? ??? ?y1 = y0 + target_y
?? ??? ?x0 = 0
?? ??? ?x1 = target_x
?? ?if(resized.shape[0] == target_y):
?? ??? ?# y=target_y
?? ??? ?y0 = 0
?? ??? ?y1 = target_y
?? ??? ?x0 = resized.shape[1] // 2 - target_x//2
?? ??? ?x1 = x0 + target_x
?? ?output_img = resized[y0:y1, x0:x1]
?? ?# cv2.imwrite(outputdir, output_img)?? ?# imwrite保存文件名不能包含中文
?? ?cv2.imencode('.jpg', output_img)[1].tofile(outputdir)
def cut2(inputdir = './t.jpg', x=0, y=0):
?? ?""" 等比縮放,不裁剪 """
?? ?# outputdir = inputdir[:-4] + '_over.jpg'
?? ?outputdir = inputdir
?? ?img = cv2.imdecode(np.fromfile(inputdir, dtype=np.uint8), cv2.IMREAD_UNCHANGED)
?? ?in_y, in_x = img.shape[:2]
?? ?if(x):
?? ??? ?# 等比縮小為x=
?? ??? ?fxy = x/in_x
?? ?elif(y):
?? ??? ?# 等比縮小為y=
?? ??? ?fxy = y/in_y
?? ?else:
?? ??? ?fxy = 1
?? ?# 按比例縮放,fx:x軸縮放比例,fy:y軸縮放比例
?? ?output_img = cv2.resize(img, (0,0), fx=fxy, fy=fxy, interpolation=cv2.INTER_AREA)
?? ?cv2.imencode('.jpg', output_img)[1].tofile(outputdir)
if __name__ == "__main__":
?? ?original_dir = input('文件夾路徑:')
?? ?get_dir(original_dir)

到此這篇關(guān)于python利用線程生成不同尺寸的縮略圖的文章就介紹到這了,更多相關(guān)python生成縮略圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pandas中Series的使用方式

    pandas中Series的使用方式

    這篇文章主要介紹了pandas中Series的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • python實(shí)戰(zhàn)項(xiàng)目scrapy管道學(xué)習(xí)爬取在行高手?jǐn)?shù)據(jù)

    python實(shí)戰(zhàn)項(xiàng)目scrapy管道學(xué)習(xí)爬取在行高手?jǐn)?shù)據(jù)

    這篇文章主要為介紹了python實(shí)戰(zhàn)項(xiàng)目scrapy管道學(xué)習(xí)拿在行練手爬蟲項(xiàng)目,爬取在行高手?jǐn)?shù)據(jù),本篇博客的重點(diǎn)為scrapy管道pipelines的應(yīng)用,學(xué)習(xí)時(shí)請(qǐng)重點(diǎn)關(guān)注
    2021-11-11
  • 關(guān)于pytorch求導(dǎo)總結(jié)(torch.autograd)

    關(guān)于pytorch求導(dǎo)總結(jié)(torch.autograd)

    這篇文章主要介紹了關(guān)于pytorch求導(dǎo)總結(jié)(torch.autograd),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • django框架兩個(gè)使用模板實(shí)例

    django框架兩個(gè)使用模板實(shí)例

    這篇文章主要介紹了django框架使用模板方法,結(jié)合兩個(gè)具體實(shí)例形式詳細(xì)分析了Django框架模板的相關(guān)使用技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • Python爬蟲報(bào)錯(cuò)<response [406]>(已解決)

    Python爬蟲報(bào)錯(cuò)<response [406]>(已解決)

    本文主要介紹了Python爬蟲報(bào)錯(cuò)<response [406]>,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python爬蟲必備技巧詳細(xì)總結(jié)

    Python爬蟲必備技巧詳細(xì)總結(jié)

    本篇文章介紹了我在爬蟲過(guò)程中總結(jié)的幾個(gè)必備技巧,都是經(jīng)過(guò)實(shí)驗(yàn)的,通讀本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下
    2021-10-10
  • python爬蟲 execjs安裝配置及使用

    python爬蟲 execjs安裝配置及使用

    這篇文章主要介紹了python爬蟲 execjs安裝配置及使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • python和shell實(shí)現(xiàn)的校驗(yàn)IP地址合法性腳本分享

    python和shell實(shí)現(xiàn)的校驗(yàn)IP地址合法性腳本分享

    這篇文章主要介紹了python和shell實(shí)現(xiàn)的校驗(yàn)IP地址合法性腳本分享,每個(gè)腳本配有執(zhí)行效果圖,需要的朋友可以參考下
    2014-10-10
  • Pygame實(shí)戰(zhàn)之經(jīng)典泡泡龍小游戲

    Pygame實(shí)戰(zhàn)之經(jīng)典泡泡龍小游戲

    Python版的消除類的游戲還是很多的,今天就出一個(gè)消除類——泡泡龍小游戲。文中的示例代碼很詳細(xì),感興趣的小伙伴快來(lái)跟隨小編一起學(xué)習(xí)一下吧
    2021-12-12
  • Python數(shù)據(jù)分析?Numpy?的使用方法

    Python數(shù)據(jù)分析?Numpy?的使用方法

    這篇文章主要介紹了Python數(shù)據(jù)分析?Numpy?的使用方法,Numpy?是一個(gè)Python擴(kuò)展庫(kù),專門做科學(xué)計(jì)算,也是大部分Python科學(xué)計(jì)算庫(kù)的基礎(chǔ),關(guān)于其的使用方法,需要的小伙伴可以參考下面文章內(nèi)容
    2022-05-05

最新評(píng)論

双鸭山市| 修武县| 新源县| 应用必备| 新沂市| 宁远县| 永年县| 永吉县| 鄂托克旗| 杨浦区| 阜城县| 东辽县| 扎兰屯市| 丹江口市| 江孜县| 黔西| 济阳县| 龙井市| 广灵县| 咸阳市| 临海市| 永泰县| 法库县| 略阳县| 崇信县| 龙胜| 新竹县| 和田县| 伊吾县| 观塘区| 长治市| 乐陵市| 綦江县| 榆社县| 西平县| 扎赉特旗| 沙雅县| 通道| 拉萨市| 江山市| 册亨县|