c#如何wmf图片转换成png图片_每日一学:如何将png图片转换为jpg图片
背景
最近在工作中會(huì)遇到需要將 png 圖片轉(zhuǎn)換為 jpg 圖片的需求,主要原因也是 png 圖片占的空間太大,如果圖片數(shù)量上萬張,可能就需要十幾G的存儲(chǔ)空間,所以希望轉(zhuǎn)換為更小的 jpg 圖片。
當(dāng)然,這里并不是直接修改圖片后綴為 jpg 即可,這樣直接粗暴的轉(zhuǎn)換可能會(huì)對圖片質(zhì)量有所損失,包括背景顏色會(huì)出現(xiàn)問題;
解決思路
實(shí)際上要將 png 圖片轉(zhuǎn)換為 jpg 格式的圖片,其實(shí)就是從 4 通道的 png 轉(zhuǎn)換為 3通道的 jpg 格式,也就是能保留原始的 RGB 三通道,只是去掉第四個(gè)通道的 alpha 通道,也就是我們需要將 RGB 通道的像素部分提取出來,然后貼到一個(gè)空白的新圖片上,再保存為 jpg 圖片即可。
代碼實(shí)現(xiàn)
這里使用的是 Pillow 庫來進(jìn)行轉(zhuǎn)換,然后這里需要注意不同模式的圖片,處理方式還是有所不同的。
這里簡單介紹,通過 Pillow 打開的圖片,有以下幾種模式:
- 1:1位像素,表示黑和白,但是存儲(chǔ)的時(shí)候每個(gè)像素存儲(chǔ)為8bit。
- L:8位像素,表示黑和白。
- P:8位像素,使用調(diào)色板映射到其他模式。
- RGB:3x8位像素,為真彩色。
- RGBA:4x8位像素,有透明通道的真彩色。
- CMYK:4x8位像素,顏色分離。
- YCbCr:3x8位像素,彩色視頻格式。
- I:32位整型像素。
- F:32位浮點(diǎn)型像素。
通過 mode 即可查看圖片的模式。
這里介紹比較常見的幾種模式轉(zhuǎn)換為 jpg 的方法,首先是 L 模式的轉(zhuǎn)換:
from?PIL?import?Imageim?=?Image.open("test.png")bg?=?Image.new("RGB",?im.size,?(255,255,255))bg.paste(im,im)bg.save("test.jpg")然后是 RGBA 和 P 模式的轉(zhuǎn)換,其轉(zhuǎn)換方法也是一樣的:
from?PIL?import?Imageimg_pil?=?Image.open('test.png').convert('RGBA')x,?y?=?img_pil.sizep?=?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')下面給出一個(gè)代碼例子:
首先是導(dǎo)入需要的庫:
import?osfrom?PIL?import?Image%matplotlib?inlineimport?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)開始轉(zhuǎn)換:
#?轉(zhuǎn)?jpgimg_pil?=?img_png.convert('RGBA')x,?y?=?img_pil.sizeimg_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')代碼輸出結(jié)果如下所示:
通過這種操作,原本是 128kb 的 png 圖片轉(zhuǎn)換為 38kb 左右的 jpg 圖片,減少了接近 4 倍的存儲(chǔ)空間,如下所示:
所以如果對圖片質(zhì)量要求不高,可以接受一定的質(zhì)量損失,可以將圖片保存為 jpg 格式進(jìn)行保存,這樣可以保存更多數(shù)量的圖片。
參考:
- http://www.voidcn.com/article/p-rbpllhah-btp.html
小結(jié)
這只是一種解決 png 轉(zhuǎn)換為 jpg 圖片的方法,是從采用 Pillow 庫的代碼實(shí)現(xiàn)方法,如果是采用其他的圖片庫,比如 opencv 等,也有相應(yīng)的解決方法,這里大家可以自己探索一下,網(wǎng)上應(yīng)該也是有相應(yīng)的解決方法的。
總結(jié)
以上是生活随笔為你收集整理的c#如何wmf图片转换成png图片_每日一学:如何将png图片转换为jpg图片的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 液晶弹性自由能计算_自由能方法应用(一)
- 下一篇: 把一个人的特点写具体作文_部编版五年级下