每日一学:如何转换png图片为jpg图片

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶”

总第 128 篇文章,本文大约 800 字,阅读大约需要 3 分钟

背景

最近在工作中会遇到需要将 png 图片转换为 jpg 图片的需求,主要原因也是 png 图片占的空间太大,如果图片数量上万张,可能就需要十几G的存储空间,所以希望转换为更小的 jpg 图片。

当然,这里并不是直接修改图片后缀为 jpg 即可,这样直接粗暴的转换可能会对图片质量有所损失,包括背景颜色会出现问题;

解决思路

实际上要将 png 图片转换为 jpg 格式的图片,其实就是从 4 通道的 png 转换为 3通道的 jpg 格式,也就是能保留原始的 RGB 三通道,只是去掉第四个通道的 alpha 通道,也就是我们需要将 RGB 通道的像素部分提取出来,然后贴到一个空白的新图片上,再保存为 jpg 图片即可。

代码实现

这里使用的是 Pillow 库来进行转换,然后这里需要注意不同模式的图片,处理方式还是有所不同的。

这里简单介绍,通过 Pillow 打开的图片,有以下几种模式:

  • 1:1位像素,表示黑和白,但是存储的时候每个像素存储为8bit。

  • L:8位像素,表示黑和白。

  • P:8位像素,使用调色板映射到其他模式。

  • RGB:3x8位像素,为真彩色。

  • RGBA:4x8位像素,有透明通道的真彩色。

  • CMYK:4x8位像素,颜色分离。

  • YCbCr:3x8位像素,彩色视频格式。

  • I:32位整型像素。

  • F:32位浮点型像素。

通过 mode 即可查看图片的模式。

这里介绍比较常见的几种模式转换为 jpg 的方法,首先是 L 模式的转换:

from PIL import Image
im = Image.open("test.png")
bg = Image.new("RGB", im.size, (255,255,255))
bg.paste(im,im)
bg.save("test.jpg")

然后是 RGBA  和 P  模式的转换,其转换方法也是一样的:

from PIL import Image
img_pil = Image.open('test.png').convert('RGBA')
x, y = img_pil.size
p = Image.new('RGBA', img_pil.size, (255, 255, 255))
p.paste(img_pil, (0, 0, x, y), img_pil)
p = p.convert("RGB")
p.save('test.jpg')

下面给出一个代码例子:

首先是导入需要的库:

import os
from PIL import Image
%matplotlib inline
import matplotlib.pyplot as plt

接着读取图片:

# 原始的 png 图片
ori_img = 'plane.png'
# 读取图片
img_png = Image.open(ori_img)
print(img_png.mode, img_png.size)
plt.imshow(img_png)

开始转换:

# 转 jpg
img_pil = img_png.convert('RGBA')
x, y = img_pil.size
img_jpg = Image.new('RGBA', img_pil.size, (255, 255, 255))
img_jpg.paste(img_pil, (0, 0, x, y), img_pil)
img_jpg = img_jpg.convert("RGB")
print(img_jpg.mode, img_jpg.size)
plt.imshow(img_jpg)

保存图片:

img_jpg.save('plane.jpg')

代码输出结果如下所示:

通过这种操作,原本是 128kb 的 png 图片转换为 38kb 左右的 jpg 图片,减少了接近 4 倍的存储空间,如下所示:

所以如果对图片质量要求不高,可以接受一定的质量损失,可以将图片保存为 jpg 格式进行保存,这样可以保存更多数量的图片。

参考:

  • http://www.voidcn.com/article/p-rbpllhah-btp.html

小结

这只是一种解决 png 转换为 jpg 图片的方法,是从采用 Pillow 库的代码实现方法,如果是采用其他的图片库,比如 opencv 等,也有相应的解决方法,这里大家可以自己探索一下,网上应该也是有相应的解决方法的。


精选AI文章

1. 10个实用的机器学习建议

2. 深度学习算法简要综述(上)

3. 深度学习算法简要综述(上)

4. 常见的数据增强项目和论文介绍

5. 实战|手把手教你训练一个基于Keras的多标签图像分类器

精选python文章

1. Python 基础入门--简介和环境配置

2. python版代码整洁之道

3. 快速入门 Jupyter notebook

4. Jupyter 进阶教程

5. 10个高效的pandas技巧

精选教程资源文章

1. [资源分享] TensorFlow 官方中文版教程来了

2. [资源]推荐一些Python书籍和教程,入门和进阶的都有!

3. [Github项目推荐] 推荐三个助你更好利用Github的工具

4. Github上的各大高校资料以及国外公开课视频

5. GitHub上有哪些比较好的计算机视觉/机器视觉的项目?

欢迎关注我的微信公众号--算法猿的成长,或者扫描下方的二维码,大家一起交流,学习和进步!

 

如果觉得不错,在看、转发就是对小编的一个支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 数据模型

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶”总第 129 篇文章,本文大约 4500 字,阅读大约需要 15 分钟最近开始阅读《流畅的python》,也会开始更新这本书的学习笔记第一篇的内容是第一章 python 数…

每日一学:如何用matplotlib展示图片

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶”总第 130 篇文章,本文大约 1000 字,阅读大约需要 5 分钟前言今天简单介绍如何通过 matplotlib 展示图片,分为以下几种情况:直接用 matplotli…

每日一学:如何读取网络图片

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶”总第 131 篇文章,本文大约 1300 字,阅读大约需要 3 分钟前言有时候我们需要读取的图片是网络上的图片,应该怎么操作呢?这里也是介绍两个常用…

编写高效的PyTorch代码技巧(上)

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶”总第 132 篇文章,本文大约 7000 字,阅读大约需要 20 分钟原文:https://github.com/vahidk/EffectivePyTorch作者:vahidk前言这是一份 PyTorc…

编写高效的PyTorch代码技巧(下)

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶”总第 133 篇文章,本文大约 3000 字,阅读大约需要 15 分钟原文:https://github.com/vahidk/EffectivePyTorch作者:vahidk前言这是一份 PyTorc…

2020年计算机视觉学习指南

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶”总第 134 篇文章,本文大约 3000 字,阅读大约需要 10 分钟原文:https://towardsdatascience.com/guide-to-learn-computer-vision-in-2020-36f19d92c934作…

是选择Keras还是PyTorch开始你的深度学习之旅呢?

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶”总第 135 篇文章,本文大约 7000 字,阅读大约需要 20 分钟原文:https://medium.com/karan_jakhar/keras-vs-pytorch-dilemma-dc434e5b5ae0作者&#xff1…

关于myeclipse打开jsp巨慢解决方案

作为企业级开发最流行的工具,用Myeclipse开发java web程序无疑是最合适的,java web前端采用jsp来显示,myeclipse默认打开jsp的视图有卡顿的现象,那么如何更改jsp默认的打开方式,让我们可以进行更快速的jsp开发呢? 简单…

event

听取了网友:kenwang的意见,我的Blog在记流水账啊,现在才发现我发表的都是代码,一个感想也没有,以后要慢慢改正。明天要培训公司的框架,后天要搬家,这个周未没有得休息。

60分钟快速入门PyTorch

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶”总第 136 篇文章,本文大约 26000 字,阅读大约需要 60 分钟PyTorch 是由 Facebook 开发,基于 Torch 开发,从并不常用的 Lua 语言转为 Python …

[libGDX游戏开发教程]使用libGDX进行游戏开发(12)-Action动画

前文章节列表:使用libGDX进行游戏开发(11)-高级编程技巧 使用libGDX进行游戏开发(10)-音乐音效不求人,程序员也可以DIY 使用libGDX进行游戏开发(9)-场景过渡使用libGDX进行游戏开发(8)-没有美工的程序员,能够依赖的还有粒子系统 使用libGDX进…

将DataSet中的操作更新到Access数据库

代码如下&#xff1a;<%import Namespace Namespacesystem.data%><%import Namespace Namespacesystem.data.oledb%><script languagevb runatserver>Sub page_load()sub page_load() dim strConnection as string dim strSQL as string dim ob…

@synthesize obj=_obj的意义详解 @property和@synthesize

本文转载至&#xff1a;http://blog.csdn.net/showhilllee/article/details/8971159我们在进行iOS开发时&#xff0c;经常会在类的声明部分看见类似于synthesize window_window; 的语句&#xff0c;那么&#xff0c;这个window是什么&#xff0c;_ window又是什么&#xff0c;两…

Github项目推荐|可视化 GAN 的训练过程

点击上方“算法猿的成长“&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”总第 137 篇文章&#xff0c;本文大约 1000 字&#xff0c;阅读大约需要 5 分钟今天介绍的一个开源的 github 项目&#xff0c;主要是实现了对 GAN 训练过程的可视化代码&#xff0c;项目链…

Github|类别不平衡学习资源(上)

点击上方“算法猿的成长“&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”总第 138 篇文章&#xff0c;本文大约 5400 字&#xff0c;阅读大约需要 15 分钟今天推荐的是一个 github 项目&#xff0c;项目地址如下&#xff0c;主要是类别不平衡学习的论文、代码、框…

Github|类别不平衡学习资源(下)

点击上方“算法猿的成长“&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”总第 139 篇文章&#xff0c;本文大约 3600 字&#xff0c;阅读大约需要 10 分钟继续介绍类别不平衡学习资源&#xff0c;github 地址&#xff1a;https://github.com/ZhiningLiu1998/awes…

Github | 线稿自动上色

点击上方“算法猿的成长“&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”总第 140 篇文章&#xff0c;本文大约 1500 字&#xff0c;阅读大约需要 5 分钟今天要介绍的是一个 Github 项目&#xff0c;项目地址如下&#xff0c;它实现了对线稿的自动上色功能&#…

如何在图片上添加文本信息

点击上方“算法猿的成长“&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”总第 141 篇文章&#xff0c;本文大约 1500 字&#xff0c;阅读大约需要 5 分钟前言给图片添加文本信息是非常常见的需求&#xff0c;通常需要添加的文本信息分为中文文字或者是非中文的文…