Python实现无损放大图片的示例代码

 更新时间:2022年08月31日 14:19:19   作者:小木_.  
这篇文章主要为大家详细介绍了如何利用Python语言实现一个简单的无损放大图片小程序,可以支持将JPG/PNG图片无损放大上万像素,感兴趣的可以了解一下

今天做一个超简单的无损放大图片的程序,原理很简单

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

到此这篇关于Python实现无损放大图片的示例代码的文章就介绍到这了,更多相关Python无损放大图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基础语音识别-食物语音识别baseline(CNN)

    基础语音识别-食物语音识别baseline(CNN)

    这篇文章主要介绍了一个基础语音识别题目-食物语音识别baseline(CNN),代码详细吗,对于想要学习语音识别的朋友可以参考下
    2021-04-04
  • python中如何进行连乘计算

    python中如何进行连乘计算

    在本篇文章里小编给大家分享的是关于python连乘计算的代码,有兴趣的朋友们可以参考学习下。
    2020-05-05
  • Python使用回溯法子集树模板解决爬楼梯问题示例

    Python使用回溯法子集树模板解决爬楼梯问题示例

    这篇文章主要介绍了Python使用回溯法子集树模板解决爬楼梯问题,简单说明了爬楼梯问题并结合实例形式给出了Python回溯法子集树模板解决爬楼梯问题的相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • python基础教程项目三之万能的XML

    python基础教程项目三之万能的XML

    这篇文章主要为大家详细介绍了python基础教程项目三之万能的XML,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Python加载数据的5种不同方式(收藏)

    Python加载数据的5种不同方式(收藏)

    这篇文章主要介绍了Python加载数据的5种不同方式(收藏),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 采用Psyco实现python执行速度提高到与编译语言一样的水平

    采用Psyco实现python执行速度提高到与编译语言一样的水平

    这篇文章主要介绍了采用Psyco实现python执行速度提高到与编译语言一样的水平的方法,是非常实用的Python第三方库,需要的朋友可以参考下
    2014-10-10
  • python中的sys模块和os模块

    python中的sys模块和os模块

    这篇文章主要介绍了python中的sys模块和os模块,sys模块提供对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数,os模块提供了多数操作系统的功能接口函数,下文更多相关内容需要的小伙伴可以参考一下
    2022-03-03
  • python实现的AES双向对称加密解密与用法分析

    python实现的AES双向对称加密解密与用法分析

    这篇文章主要介绍了python实现的AES双向对称加密解密与用法,简单分析了AES加密解密算法的基本概念并结合实例形式给出了AES加密解密算法的相关实现技巧与使用注意事项,需要的朋友可以参考下
    2017-05-05
  • 在Python的Django框架中simple-todo工具的简单使用

    在Python的Django框架中simple-todo工具的简单使用

    这篇文章主要介绍了在Python的Django框架中simple-todo工具的简单使用,该工具基于原web.py中的开源项目,需要的朋友可以参考下
    2015-05-05
  • python 日期操作类代码

    python 日期操作类代码

    这篇文章主要介绍了python 日期操作类代码,里面涉及了python日期操作的一些基础知识,需要的朋友可以参考下
    2018-05-05

最新评论