Python實(shí)現(xiàn)無(wú)損放大圖片的示例代碼
今天做一個(gè)超簡(jiǎn)單的無(wú)損放大圖片的程序,原理很簡(jiǎn)單
JPG原理:讀取原圖片的像素點(diǎn)的RGB顏色值并保存到文件內(nèi),然后將原圖進(jìn)行翻倍放大,在放大的圖上進(jìn)行繪制,繪制一個(gè)像素的翻倍大小,一行一行的繪制,然后保存并刪掉顏色文件
PNG原理:因?yàn)橛胁糠諴NG是透明的,所以以RGBA顏色值進(jìn)行保存并繪制,先生成顏色文件和模板圖片,模板圖片是8UY88767.png 這個(gè)模板圖片是原圖的翻倍大小,是臨時(shí)的模板,然后生成完畢后再讀取顏色文件,在模板圖片上進(jìn)行重組并生成最終的圖片,也就是無(wú)損放大后的圖片
別忘了留個(gè)贊
這個(gè)是將原圖無(wú)損放大8倍的效果,JPG格式
這個(gè)是將原圖無(wú)損放大8倍的效果,PNG格式
無(wú)損放大JPG源代碼
#!/usr/bin/python # -*- coding:utf-8 -*- import cv2 from PIL import Image import time import shutil import os DATA = input('請(qǐng)輸入要放大的圖片名稱(JPG文件名稱必須使用數(shù)字或英文):') Multiple = int(input('請(qǐng)輸入要放大的圖片的倍數(shù)(必須大于1):')) DATA_file = input('請(qǐng)輸入要圖片要保存的圖片名稱:') print('開(kāi)始放大....') os.mkdir('DATA') # 新建 #讀取圖片 要放大的圖片 src = cv2.imread(DATA) # 用來(lái)讀取原圖片的像素RGB顏色值 先讀取圖片文件 IMG = Image.open(DATA) #獲取圖像大小 獲取圖像的大寫XY也是顛倒過(guò)來(lái)的 y, x = src.shape[:2] # 臨時(shí)裝飾器 List_elements = [] for YY in range(y): # 獲取圖片的Y軸有多少像素 也相當(dāng)于長(zhǎng)度 '''意思:循環(huán)讀取圖片的每一個(gè)像素點(diǎn)的RGB值 并以列表的形式存儲(chǔ)起來(lái)''' if int(len(List_elements)) >= 2: # 每次循環(huán)完畢后要將列表的值恢復(fù)無(wú) List_elements = [] for XX in range(x): # 獲取圖片的X軸有多少像素 也相當(dāng)于寬度 # IMG.getpixel((a, aa)) 用來(lái)獲取圖片某位置的RGB像素值 提示:獲取的值 對(duì)應(yīng) BGR 是RGB反過(guò)來(lái)的 List_elements = List_elements + [list(IMG.getpixel((XX, YY)))] # 讀取某坐標(biāo)的像素值并將元組為列表進(jìn)行存儲(chǔ) NAME = open(f"DATA/{YY}", 'w') # 存儲(chǔ) NAME.write(str(List_elements)) # 將列表轉(zhuǎn)為字符串保存 NAME.close() time.sleep(2) # 延遲一下 ,防止文件加載過(guò)慢讀取錯(cuò)誤 # 圖像縮放 要將原圖進(jìn)行翻倍放大 然后在原圖的基礎(chǔ)上進(jìn)行繪圖 result = cv2.resize(src, (x*Multiple,y*Multiple)) for RGB_DATA_Y in range(y): # 循環(huán)所有文件 Y有多少像素 就有多少個(gè)RGB顏色文件 '''循環(huán)讀取剛剛存儲(chǔ)的RGB顏色文件 并循環(huán)進(jìn)行繪制 以倍數(shù)進(jìn)行繪圖 確保無(wú)損放大''' NAME_ = eval(open(f'DATA/{RGB_DATA_Y}', 'r', encoding='utf-8').read()) # 讀取文件并轉(zhuǎn)為列表 for RGB_DATA_X in range(len(NAME_)): # 獲取 文件內(nèi)有多少個(gè)子列表 ''' 因?yàn)橥ㄟ^(guò)getpixel 獲取出來(lái)的顏色是反過(guò)來(lái)的 RGB 也就是 BGR 在顏色文件內(nèi)的數(shù)值也是反過(guò)來(lái)的,所以在這里讀取的時(shí)候要將其顛倒一下,反向轉(zhuǎn)換一下 ''' _DATA = NAME_[RGB_DATA_X] _DATA.reverse() ''' 當(dāng)前這個(gè)模塊是核心模塊 主要是用來(lái)讀取并繪制出原圖的倍數(shù) 原理: result[1,1] = [255,255,255] 填充 圖片的第一個(gè)像素為白色 [255,255,255] 是RGB的白色顏色數(shù)值 result[0:2,0:4] = [255,255,255] 填充圖片 X軸從0像素到2像素為白色 Y軸從0像素到4像素為白色 ''' try: result[RGB_DATA_Y*Multiple:RGB_DATA_Y*Multiple+Multiple,RGB_DATA_X*Multiple:RGB_DATA_X*Multiple+Multiple] = _DATA except:pass # 寫入保存圖像 cv2.imwrite(DATA_file, result) print('完成....') try: shutil.rmtree("DATA") # 刪除文件夾和文件 except:pass
無(wú)損放大PNG源代碼
#!/usr/bin/python # -*- coding:utf-8 -*- import cv2 from PIL import Image import time import shutil import os DATA = input('請(qǐng)輸入要放大的圖片名稱(PNG文件名稱必須使用數(shù)字或英文):') Multiple = int(input('請(qǐng)輸入要放大的圖片的倍數(shù)(必須大于1):')) DATA_file = input('請(qǐng)輸入要圖片要保存的圖片名稱:') print('開(kāi)始放大....') os.mkdir('DATA') # 新建 #讀取圖片 要放大的圖片 src = cv2.imread(DATA) # 用來(lái)讀取原圖片的像素RGB顏色值 先讀取圖片文件 IMG = Image.open(DATA) #獲取圖像大小 獲取圖像的大寫XY也是顛倒過(guò)來(lái)的 y, x = src.shape[:2] # 模板 # 圖像縮放 要將原圖進(jìn)行翻倍放大 然后在原圖的基礎(chǔ)上進(jìn)行繪圖 result = cv2.resize(src, (x*Multiple,y*Multiple)) # 寫入保存圖像 - 模板圖片不用管 cv2.imwrite('8UY88767.png', result) # 臨時(shí)裝飾器 List_elements = [] # 存儲(chǔ)文件的個(gè)數(shù) 后期讀取方便,不會(huì)錯(cuò)讀取 Number_documents = 0 for YY in range(y): # 獲取圖片的Y軸有多少像素 也相當(dāng)于長(zhǎng)度 '''意思:循環(huán)讀取圖片的每一個(gè)像素點(diǎn)的RGBA值 并以列表的形式存儲(chǔ)起來(lái)''' if int(len(List_elements)) >= 2: # 每次循環(huán)完畢后要將列表的值恢復(fù)無(wú) List_elements = [] for XX in range(x): # 獲取圖片的X軸有多少像素 也相當(dāng)于寬度 # IMG.getpixel((a, aa)) 用來(lái)獲取圖片某位置的RGBA像素值 List_elements = List_elements + [IMG.getpixel((XX, YY))]*Multiple # 讀取某坐標(biāo)的像素值并將元組為列表進(jìn)行存儲(chǔ) Multiple是倍數(shù) for a in range(Multiple): # Multiple是倍數(shù) 如果是2倍 則生成兩個(gè)同樣的顏色文件 在后期進(jìn)行單行輸出多次 確保以像素點(diǎn)進(jìn)行放大 NAME = open(f"DATA/{Number_documents}", 'w') # 存儲(chǔ) NAME.write(str(List_elements)) # 將列表轉(zhuǎn)為字符串保存 NAME.close() Number_documents = Number_documents + 1 time.sleep(1) # 延遲一下 ,防止文件加載過(guò)慢讀取錯(cuò)誤 DATA_ = list() # 定義需要處理的數(shù)據(jù)列表 for a in range(Number_documents): NAME = open(f"DATA/{a}", 'r').read() # 讀取顏色文件 NAME = list(eval(NAME)) # 將顏色文件轉(zhuǎn)換為列表 for aa in range(len(NAME)): # 循環(huán)讀取列表的顏色值 DATA_.append(NAME[aa]) # 將顏色值保存到數(shù)據(jù)列表 # 打開(kāi)寫入模板圖片 IMG_2 = Image.open('8UY88767.png') # 轉(zhuǎn)化為RGBA RGBA_IMG = IMG_2.convert("RGBA") RGBA_IMG.putdata(DATA_) # 寫入圖片 RGBA_IMG.save(DATA_file, "PNG") # 保存圖片 print('完成....') try: shutil.rmtree("DATA") # 刪除文件夾和文件 except:pass try: os.remove("8UY88767.png") # 刪除文件 except:pass
到此這篇關(guān)于Python實(shí)現(xiàn)無(wú)損放大圖片的示例代碼的文章就介紹到這了,更多相關(guān)Python無(wú)損放大圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基礎(chǔ)語(yǔ)音識(shí)別-食物語(yǔ)音識(shí)別baseline(CNN)
這篇文章主要介紹了一個(gè)基礎(chǔ)語(yǔ)音識(shí)別題目-食物語(yǔ)音識(shí)別baseline(CNN),代碼詳細(xì)嗎,對(duì)于想要學(xué)習(xí)語(yǔ)音識(shí)別的朋友可以參考下2021-04-04Python使用回溯法子集樹(shù)模板解決爬樓梯問(wèn)題示例
這篇文章主要介紹了Python使用回溯法子集樹(shù)模板解決爬樓梯問(wèn)題,簡(jiǎn)單說(shuō)明了爬樓梯問(wèn)題并結(jié)合實(shí)例形式給出了Python回溯法子集樹(shù)模板解決爬樓梯問(wèn)題的相關(guān)操作技巧,需要的朋友可以參考下2017-09-09python基礎(chǔ)教程項(xiàng)目三之萬(wàn)能的XML
這篇文章主要為大家詳細(xì)介紹了python基礎(chǔ)教程項(xiàng)目三之萬(wàn)能的XML,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04Python加載數(shù)據(jù)的5種不同方式(收藏)
這篇文章主要介紹了Python加載數(shù)據(jù)的5種不同方式(收藏),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11采用Psyco實(shí)現(xiàn)python執(zhí)行速度提高到與編譯語(yǔ)言一樣的水平
這篇文章主要介紹了采用Psyco實(shí)現(xiàn)python執(zhí)行速度提高到與編譯語(yǔ)言一樣的水平的方法,是非常實(shí)用的Python第三方庫(kù),需要的朋友可以參考下2014-10-10python實(shí)現(xiàn)的AES雙向?qū)ΨQ加密解密與用法分析
這篇文章主要介紹了python實(shí)現(xiàn)的AES雙向?qū)ΨQ加密解密與用法,簡(jiǎn)單分析了AES加密解密算法的基本概念并結(jié)合實(shí)例形式給出了AES加密解密算法的相關(guān)實(shí)現(xiàn)技巧與使用注意事項(xiàng),需要的朋友可以參考下2017-05-05在Python的Django框架中simple-todo工具的簡(jiǎn)單使用
這篇文章主要介紹了在Python的Django框架中simple-todo工具的簡(jiǎn)單使用,該工具基于原web.py中的開(kāi)源項(xiàng)目,需要的朋友可以參考下2015-05-05