2016-10-02 99 views
3

我希望用戶繪製一些東西。我將多次旋轉該圖像,並將每個文件保存到一個文件夾中。模板是img<degree>.png,例如img24.png是旋轉24度的原始圖像。這就像使用Rotate tool,將其設置爲24度並使用默認座標導出它。重複旋轉 - 在導出到PNG時增加圖像尺寸

問題是,我每次旋轉並導出到PNG文件越來越大。當原始文件是100x100 & 380B時,第9個文件是413x412 2,47KB。我希望圖像保持相同的大小(在上例中爲100x100)。

(define (degrees-to-radians degrees) (/ (* degrees *pi*) 180)) 
(define (script-fu-rotate-and-save in-image in-drawable directory-name) ; degree) 

    (let ((ind 0) (x 0) (y 0)) 
    (while (< ind 361) 
     (set! x (car (gimp-image-width in-image))) 
     (set! y (car (gimp-image-height in-image))) 
     (gimp-item-transform-rotate in-drawable (degrees-to-radians ind) FALSE (/ x 2) (/ y 2)) 
     (file-png-save-defaults 1 in-image in-drawable (string-append directory-name "/img" (number->string ind) ".png") (string-append directory-name "/temp.png")) 
     (set! ind (+ ind 45)) 
    ) 
) 
    ;(gimp-displays-flush) ; show changes on image 
) 
(script-fu-register 
    "script-fu-rotate-and-save" ;name 
    "rotate and save" 
    "Rotates and saves" 
    "me" 
    "copyrights" 
    "today" 
    "" 
    SF-IMAGE "image-main" 0 
    SF-DRAWABLE "drawable-main" 0 
    SF-DIRNAME "directory-name" "" 
    ;SF-ADJUSTMENT "label" '(value lower upper step_inc page_inc digits type) 
    ;SF-ADJUSTMENT "degree" '(1 1 360 1 1 0 0) 
) 
(script-fu-menu-register "script-fu-rotate-and-save" "<Image>/Rotate and save") 

回答

3

如果您旋轉矩形圖像,則必須獲取稍大的圖像或剪下部分數據。通常感興趣的區域實際上是大致圓形的,並且角落可以是背景或透明的。然而,旋轉算法不太可能爲您做出決定。

如果您迭代旋轉,您不但會得到大小的累積,還會因爲像素不匹配而看到累積或錯誤(要查看如何抑制此效應,請在二進制圖像庫中查找rotatebyshear (here)所以你需要始終從你的原始圖像開始,並應用總旋轉

0

如果你比較gimp-item-transform-rotate到它現在不贊成使用的前奏,你會請注意它有一個稱爲剪輯結果的附加參數,具有四個可能的值(parens中的數字是選項的數值):

  • 變換RESIZE-ADJUST(0)
  • 變換RESIZE-CLIP(1)
  • 變換RESIZE-CROP(2)
  • 變換RESIZE-CROP-WITH-ASPECT(3)

當前gimp-item- * API從當前上下文中獲取值,gimp-context-set-transform-resize用於設置您所需的值。

默認值爲TRANSFORM-RESIZE-ADJUST(0) - 這會在每次旋轉時放大圖層,並且如果一遍一遍地旋轉同一圖層,結果會變得越來越大。

你想嘗試TRANSFORM-RESIZE-CLIP(1) - 這將旋轉的圖層剪裁到原始大小。

其餘兩個選項有點難以理解 - 你肯定想要have a look at the user manual。這些選項對於轉換工具來說很常見,順便說一句。

馬爾科姆回​​答中指出的錯誤積累問題依然存在。您肯定想要通過累積角度旋轉原始圖層的副本,而不是一遍又一遍旋轉同一圖層。