亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何提高函數'image.save()'的質量?

如何提高函數'image.save()'的質量?

神不在的星期二 2021-12-17 16:21:09
我將圖像保存到剪貼板,當我從剪貼板讀取圖像信息并保存到本地時,圖像質量發生了變化。我怎樣才能保存它以保持原來的高質量?from PIL import ImageGrabim = ImageGrab.grabclipboard()im.save('somefile.png','PNG')我嘗試添加的參數'quality=95'中im.save(),但沒有奏效。原始圖像質量為131K,保存的圖像為112K。
查看完整描述

2 回答

?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

文件的大小與圖像的質量沒有直接關系。它還取決于編碼器的工作效率。由于它是 PNG,因此過程是無損的,因此您無需擔心 - 質量得以保留。

請注意,quality保存 JPEG 文件與 PNG 文件時,該參數具有不同的含義:

  • 對于 JPEG 文件,如果您指定較低的質量,您實際上是在允許編碼器丟棄更多信息并放棄圖像質量以換取較小的文件大小。

  • 使用 PNG,您的編碼和解碼是無損的。質量是解碼器關于壓縮文件(始終無損)花費多少時間以及可能最適合的過濾/編碼類型的提示。它更類似于參數gziplike--best--fast

有關 PNG 格式的更多信息,請訪問 Wikipedia


如果不分析這兩個圖像的內容,就不可能說出尺寸不同的原因——可能有很多原因:

  • 一個編碼器可能已經注意到圖像包含少于 256 種顏色,因此決定使用調色板,而另一個可能沒有這樣做。這可能會使圖像大小相差 3 倍,但質量卻是相同的。

  • 一個編碼器可能會使用更大的緩沖區并花費更長的時間來尋找圖像中的重復模式。舉一個簡單的例子,假設圖像寬 32,000 像素,每條線都與上面的相同。如果一個編碼器使用 8kB 緩沖區,它永遠不會發現圖像只是在頁面上一遍又一遍地重復,因此它必須完整編碼每一行,而具有 64kB 緩沖區的編碼器可能只能使用 1 個字節行并使用 PNG 過濾說“與上面的行相同”。

  • 一個編碼器可能會基于代碼的簡單性或缺乏代碼空間而決定始終以 16 位版本對數據進行編碼,即使它只能使用 8 位。

  • 一個編碼器可能會決定它總是要存儲一個 alpha 層,即使它是不透明的,因為這可能會使代碼/數據更簡單。

  • 一個編碼器可總是選擇這樣做沒有過濾,而其他必須做所需的代碼sub,up,averagePaeth過濾。

  • 一個編碼器可能沒有足夠的內存來保存整個圖像,因此它可能必須使用一種簡單的方法來確保它可以處理圖像流中稍后出現的任何內容。

我只是編造了這些例子——不要認為它們是福音——我只是想說明一些可能性。


查看完整回答
反對 回復 2021-12-17
?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

要從剪貼板復制文件的精確副本,唯一的方法是剪貼板是否包含原始文件的逐字節副本。當內容來自程序中的“復制”功能時,不會發生這種情況。

從理論上講,可以通過設置帶有原始文件副本的 blob 類型對象來創建程序來執行此操作,但這會非常低效并且會破壞剪貼板的目的。

一些要點:
- 當您使用文件管理器復制到剪貼板時,剪貼板將引用原始文件(不是整個文件,可能比 ram 大得多)
- 大多數程序會將剪貼板內容設置為“有用的版本”顯示或選擇的數據。這在很大程度上取決于程序創建者的解釋。
- 在讀取圖像時解析剪貼板內容再次受到用于處理數據并將其打包成圖像格式的庫的奇思妙想。

通常,如果您想完全復制文件,最好只復制原始文件。

話雖如此:評估復制粘貼過程的目的,并決定您從剪貼板獲得的數據是否“足夠好”用于預期目的。這顯然取決于你想用它做什么。


查看完整回答
反對 回復 2021-12-17
  • 2 回答
  • 0 關注
  • 497 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號