Python实现无损放大图片的示例代码
作者:小木_. 发布时间:2022-12-15 12:50:12
标签:Python,无损,放大,图片
今天做一个超简单的无损放大图片的程序,原理很简单
JPG原理:读取原图片的像素点的RGB颜色值并保存到文件内,然后将原图进行翻倍放大,在放大的图上进行绘制,绘制一个像素的翻倍大小,一行一行的绘制,然后保存并删掉颜色文件
PNG原理:因为有部分PNG是透明的,所以以RGBA颜色值进行保存并绘制,先生成颜色文件和模板图片,模板图片是8UY88767.png 这个模板图片是原图的翻倍大小,是临时的模板,然后生成完毕后再读取颜色文件,在模板图片上进行重组并生成最终的图片,也就是无损放大后的图片
别忘了留个赞
这个是将原图无损放大8倍的效果,JPG格式
这个是将原图无损放大8倍的效果,PNG格式
无损放大JPG源代码
#!/usr/bin/python
# -*- coding:utf-8 -*-
import cv2
from PIL import Image
import time
import shutil
import os
DATA = input('请输入要放大的图片名称(JPG文件名称必须使用数字或英文):')
Multiple = int(input('请输入要放大的图片的倍数(必须大于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轴有多少像素 也相当于长度
'''意思:循环读取图片的每一个像素点的RGB值 并以列表的形式存储起来'''
if int(len(List_elements)) >= 2: # 每次循环完毕后要将列表的值恢复无
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): # 循环所有文件 Y有多少像素 就有多少个RGB颜色文件
'''循环读取刚刚存储的RGB颜色文件 并循环进行绘制 以倍数进行绘图 确保无损放大'''
NAME_ = eval(open(f'DATA/{RGB_DATA_Y}', 'r', encoding='utf-8').read()) # 读取文件并转为列表
for RGB_DATA_X in range(len(NAME_)): # 获取 文件内有多少个子列表
'''
因为通过getpixel 获取出来的颜色是反过来的 RGB 也就是 BGR
在颜色文件内的数值也是反过来的,所以在这里读取的时候要将其颠倒一下,反向转换一下
'''
_DATA = NAME_[RGB_DATA_X]
_DATA.reverse()
'''
当前这个模块是核心模块 主要是用来读取并绘制出原图的倍数
原理:
result[1,1] = [255,255,255] 填充 图片的第一个像素为白色 [255,255,255] 是RGB的白色颜色数值
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源代码
#!/usr/bin/python
# -*- coding:utf-8 -*-
import cv2
from PIL import Image
import time
import shutil
import os
DATA = input('请输入要放大的图片名称(PNG文件名称必须使用数字或英文):')
Multiple = int(input('请输入要放大的图片的倍数(必须大于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 = []
# 存储文件的个数 后期读取方便,不会错读取
Number_documents = 0
for YY in range(y): # 获取图片的Y轴有多少像素 也相当于长度
'''意思:循环读取图片的每一个像素点的RGBA值 并以列表的形式存储起来'''
if int(len(List_elements)) >= 2: # 每次循环完毕后要将列表的值恢复无
List_elements = []
for XX in range(x): # 获取图片的X轴有多少像素 也相当于宽度
# IMG.getpixel((a, aa)) 用来获取图片某位置的RGBA像素值
List_elements = List_elements + [IMG.getpixel((XX, YY))]*Multiple # 读取某坐标的像素值并将元组为列表进行存储 Multiple是倍数
for a in range(Multiple): # Multiple是倍数 如果是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() # 定义需要处理的数据列表
for a in range(Number_documents):
NAME = open(f"DATA/{a}", 'r').read() # 读取颜色文件
NAME = list(eval(NAME)) # 将颜色文件转换为列表
for aa in range(len(NAME)): # 循环读取列表的颜色值
DATA_.append(NAME[aa]) # 将颜色值保存到数据列表
# 打开写入模板图片
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
来源:https://blog.csdn.net/weixin_46625757/article/details/126622097
0
投稿
猜你喜欢
- 去空格及特殊符号s.strip().lstrip().rstrip(',')Python strip() 方法用于移除字符串
- pandas 将字符串映射为数字在有些数据集中,有些数据变量用字符串表示,但为了方便处理,往往想转换为好处理的格式,这时候不一定要用one
- 如下所示:import matplotlib.pyplot as pltimport numpy as npimport mathdef g
- yagmail 实现发邮件yagmail 可以更简单的来实现自动发邮件功能。1、安装pip install yagmail2、简单举例imp
- 在本篇文章当中主要给大家深入介绍在 cpython 当中非常重要的一个数据结构 code object! 在上一篇文章 深入理解 pytho
- CSS重设就是由于各种浏览器解释CSS样式的初始值有所不同,导致设计师在没有定义某个CSS属性时,不同的浏览器会按照自己的默认值来为没有定义
- 引子Linux下不支持QQ等功能丰富的IM,虽然可以通过wine运行QQ2012,但是还是喜欢在gtalk群中聊天,gtalk群不支持图片方
- 1. datetime 库概述以不同格式显示日期和时间是程序中最常用到的功能。Python 提供了一个处理时间的标准函数库 datetime
- 利用PIL将图片转换为黑色与白色反转的图片,下面笔者小白介绍如何实现。解决方案一:from PIL import Imageimport P
- 全栈即指的是全栈工程师,指掌握多种技能,并能利用多种技能独立完成产品的人。就是与这项技能有关的都会,都能够独立的完成。全栈只是个概念,也分很
- 如下所示:var myarr=new Array(); //先声明一维 for(var i=0;i<2;i++){ //一
- 在PyTorch中可以方便的验证SoftMax交叉熵损失和对输入梯度的计算关于softmax_cross_entropy求导的过程,可以参考
- 如下所示:from sklearn.datasets import load_bostonboston = load_boston()fro
- 代码import turtleturtle.bgcolor("black")turtle.pensize(2)sizeh
- 记得以前写过一篇文章 php有效的过滤html标签,js代码,css样式标签: <?php $str = preg_replace(
- Windows 8 终于发布了,虽然现在可用的只是开发者预览版,好消息是,IE 10 也随着发了,虽然现在还只有Windows 8可用。我们
- 引言在观察OpenCV中某个函数在不同参数的情况下,所得到的效果的时候,我之前是改一次参数运行一次,这样做起来操作麻烦,效率低下。为了更便捷
- //创建组件 function createobj() { if (window.ActiveXObject) { return(new A
- 由于数据文件平时在数据库运行的时候处于使用状态,故当数据库处于打开状态时,管理员是无法重命名数据文件名字的。那么一定要更改这个数据文件的名字
- 1. 安装vim:# apt-get install -y vim-gnome2. 安装ctags,ctags用于支持tagli