2013-07-03 105 views
1

我有一個pixbuf圖像,我想用開羅將它保存爲pdf。由於pixbuf太大,我想縮小它。我用scale_simple的方法。但是,縮放結果變得模糊。以下是我的截圖。真正的圖像在右邊,在左邊是來自pdf的圖像blur如何在不損失質量的情況下縮小pixbuf圖像?

你知道如何在不損失質量的情況下縮小pixbuf嗎?以下是我的示例代碼。

from gi.repository import GdkPixbuf, Gdk 
import cairo 

class gui(): 
    def __init__(self): 
     pix = GdkPixbuf.Pixbuf.new_from_file('tux2.png') 
     pix = pix.scale_simple(pix.get_width()/3, pix.get_height()/3, GdkPixbuf.InterpType.HYPER) 
     ps = cairo.PDFSurface('pix.pdf', 500, 500) 
     cr = cairo.Context(ps) 
     Gdk.cairo_set_source_pixbuf(cr, pix, 0, 0) 
     cr.paint() 

if __name__ == '__main__': 
    gui() 
+0

當您縮放(位圖)圖像時,除非您同時增加dpi,否則您會失去質量。這是沒有辦法的。一張200x200的圖片只有3/9的300x300圖片的信息,並且不能丟失55%的信息而不會丟失質量。平均,模糊,抖動和其他技術都試圖使損失不那麼明顯;他們都有明顯的副作用,但不使用他們有更明顯的副作用。 – abarnert

+0

我相信這個問題正是關於增加dpi,因爲輸出是PDF,基本上是一種矢量格式。 –

回答

0

你不應該縮放pixbuf。

相反,您應該縮放對象(pixbuf照原樣)。

它會是這個樣子:

cr.save() 
cr.scale(scale_xy, scale_xy) 
cr.xxx_place_image(...) 
cr.restore() 
+0

這一個工程。謝謝。 :) – user2435611

+0

np。要添加一個警告,說你的用戶傾倒一個80Kx80K每通道16位RGB通道圖像,這將導致一個巨大的PDF,在這種情況下,你可能想要預分級柵格圖像:) –

0

有關重建使用PDF命令這個特定的圖像是什麼?它是矢量格式,您可以在svg中設計相似的圖像並將其導入。圖像縮放是丟失實際顏色數據的致命過程,因此會導致逼近。使用高級縮放算法,例如Lanczos濾波。

相關問題