日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

c#如何wmf图片转换成png图片_每日一学:如何将png图片转换为jpg图片

發(fā)布時(shí)間:2024/1/23 C# 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c#如何wmf图片转换成png图片_每日一学:如何将png图片转换为jpg图片 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景

最近在工作中會(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。