點個贊留個關注吧?。?/p>
今天做一個超簡單的無損放大圖片的程序,原理很簡單
JPG原理:讀取原圖片的像素點的RGB顏色值并保存到文件內,然后將原圖進行翻倍放大,在放大的圖上進行繪制,繪制一個像素的翻倍大小,一行一行的繪制,然后保存并刪掉顏色文件
PNG原理:因為有部分PNG是透明的,所以以RGBA顏色值進行保存并繪制,先生成顏色文件和模板圖片,模板圖片是8UY88767.png 這個模板圖片是原圖的翻倍大小,是臨時的模板,然后生成完畢后再讀取顏色文件,在模板圖片上進行重組并生成最終的圖片,也就是無損放大后的圖片
?別忘了留個贊??
這個是將原圖無損放大8倍的效果,JPG格式
這個是將原圖無損放大8倍的效果,PNG格式
?
無損放大JPG源代碼:文章來源:http://www.zghlxwxcb.cn/news/detail-508890.html
#!/usr/bin/python
# -*- coding:utf-8 -*-
import cv2
from PIL import Image
import time
import shutil
import os
DATA = input('請輸入要放大的圖片名稱(JPG文件名稱必須使用數(shù)字或英文):')
Multiple = int(input('請輸入要放大的圖片的倍數(shù)(必須大于1):'))
DATA_file = input('請輸入要圖片要保存的圖片名稱:')
print('開始放大....')
os.mkdir('DATA') # 新建
#讀取圖片 要放大的圖片
src = cv2.imread(DATA)
# 用來讀取原圖片的像素RGB顏色值 先讀取圖片文件
IMG = Image.open(DATA)
#獲取圖像大小 獲取圖像的大寫XY也是顛倒過來的
y, x = src.shape[:2]
# 臨時裝飾器
List_elements = []
for YY in range(y): # 獲取圖片的Y軸有多少像素 也相當于長度
'''意思:循環(huán)讀取圖片的每一個像素點的RGB值 并以列表的形式存儲起來'''
if int(len(List_elements)) >= 2: # 每次循環(huán)完畢后要將列表的值恢復無
List_elements = []
for XX in range(x): # 獲取圖片的X軸有多少像素 也相當于寬度
# IMG.getpixel((a, aa)) 用來獲取圖片某位置的RGB像素值 提示:獲取的值 對應 BGR 是RGB反過來的
List_elements = List_elements + [list(IMG.getpixel((XX, YY)))] # 讀取某坐標的像素值并將元組為列表進行存儲
NAME = open(f"DATA/{YY}", 'w') # 存儲
NAME.write(str(List_elements)) # 將列表轉為字符串保存
NAME.close()
time.sleep(2) # 延遲一下 ,防止文件加載過慢讀取錯誤
# 圖像縮放 要將原圖進行翻倍放大 然后在原圖的基礎上進行繪圖
result = cv2.resize(src, (x*Multiple,y*Multiple))
for RGB_DATA_Y in range(y): # 循環(huán)所有文件 Y有多少像素 就有多少個RGB顏色文件
'''循環(huán)讀取剛剛存儲的RGB顏色文件 并循環(huán)進行繪制 以倍數(shù)進行繪圖 確保無損放大'''
NAME_ = eval(open(f'DATA/{RGB_DATA_Y}', 'r', encoding='utf-8').read()) # 讀取文件并轉為列表
for RGB_DATA_X in range(len(NAME_)): # 獲取 文件內有多少個子列表
'''
因為通過getpixel 獲取出來的顏色是反過來的 RGB 也就是 BGR
在顏色文件內的數(shù)值也是反過來的,所以在這里讀取的時候要將其顛倒一下,反向轉換一下
'''
_DATA = NAME_[RGB_DATA_X]
_DATA.reverse()
'''
當前這個模塊是核心模塊 主要是用來讀取并繪制出原圖的倍數(shù)
原理:
result[1,1] = [255,255,255] 填充 圖片的第一個像素為白色 [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
無損放大PNG源代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-508890.html
#!/usr/bin/python
# -*- coding:utf-8 -*-
import cv2
from PIL import Image
import time
import shutil
import os
DATA = input('請輸入要放大的圖片名稱(PNG文件名稱必須使用數(shù)字或英文):')
Multiple = int(input('請輸入要放大的圖片的倍數(shù)(必須大于1):'))
DATA_file = input('請輸入要圖片要保存的圖片名稱:')
print('開始放大....')
os.mkdir('DATA') # 新建
#讀取圖片 要放大的圖片
src = cv2.imread(DATA)
# 用來讀取原圖片的像素RGB顏色值 先讀取圖片文件
IMG = Image.open(DATA)
#獲取圖像大小 獲取圖像的大寫XY也是顛倒過來的
y, x = src.shape[:2]
# 模板
# 圖像縮放 要將原圖進行翻倍放大 然后在原圖的基礎上進行繪圖
result = cv2.resize(src, (x*Multiple,y*Multiple))
# 寫入保存圖像 - 模板圖片不用管
cv2.imwrite('8UY88767.png', result)
# 臨時裝飾器
List_elements = []
# 存儲文件的個數(shù) 后期讀取方便,不會錯讀取
Number_documents = 0
for YY in range(y): # 獲取圖片的Y軸有多少像素 也相當于長度
'''意思:循環(huán)讀取圖片的每一個像素點的RGBA值 并以列表的形式存儲起來'''
if int(len(List_elements)) >= 2: # 每次循環(huán)完畢后要將列表的值恢復無
List_elements = []
for XX in range(x): # 獲取圖片的X軸有多少像素 也相當于寬度
# IMG.getpixel((a, aa)) 用來獲取圖片某位置的RGBA像素值
List_elements = List_elements + [IMG.getpixel((XX, YY))]*Multiple # 讀取某坐標的像素值并將元組為列表進行存儲 Multiple是倍數(shù)
for a in range(Multiple): # Multiple是倍數(shù) 如果是2倍 則生成兩個同樣的顏色文件 在后期進行單行輸出多次 確保以像素點進行放大
NAME = open(f"DATA/{Number_documents}", 'w') # 存儲
NAME.write(str(List_elements)) # 將列表轉為字符串保存
NAME.close()
Number_documents = Number_documents + 1
time.sleep(1) # 延遲一下 ,防止文件加載過慢讀取錯誤
DATA_ = list() # 定義需要處理的數(shù)據列表
for a in range(Number_documents):
NAME = open(f"DATA/{a}", 'r').read() # 讀取顏色文件
NAME = list(eval(NAME)) # 將顏色文件轉換為列表
for aa in range(len(NAME)): # 循環(huán)讀取列表的顏色值
DATA_.append(NAME[aa]) # 將顏色值保存到數(shù)據列表
# 打開寫入模板圖片
IMG_2 = Image.open('8UY88767.png')
# 轉化為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
到了這里,關于【Python 無損放大圖片】——支持JPG/PNG 可將圖片無損放大上萬像素的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!