3

我希望用户画一些东西。我将多次旋转该图像,并将每个文件保存到一个文件夹中。模板是img<degree>.png,例如img24.png旋转 24 度的原始图像。就像使用Rotate tool,将其设置为 24 度并以默认设置导出。

问题是每次我旋转并导出为 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")
4

2 回答 2

3

如果您旋转一个矩形图像,您必须获得一个稍大的图像,或者剪掉一些数据。通常,感兴趣的区域实际上大致是圆形的,而角落要么是背景的,要么是透明的。但是,旋转算法不太可能为您做出该决定。

如果您迭代旋转,您不仅会获得大小的累积,还会因为像素不匹配而获得累积或错误(要了解如何抑制这种效果,请在二值图像库(此处)中查找 rotatebyshear 。所以图像会开始模糊。所以您需要始终从原始图像开始,并应用总旋转。

于 2016-10-02T11:21:23.750 回答
0

如果您将 gimp-item-transform-rotate 与其 - 现在已弃用 - 前身进行比较,您会注意到它有一个名为 clip-result 的附加参数,有四个可能的值(括号中的数字是选项的数值):

  • 变换-调整-调整 (0)
  • 变换调整大小剪辑 (1)
  • 变换 - 调整大小 - 作物 (2)
  • 变换 - 调整大小 - 裁剪 - 纵横比 (3)

当前 gimp-item-* API 从当前上下文中获取值,gimp-context-set-transform-resize 用于设置您想要的值。

默认值为 TRANSFORM-RESIZE-ADJUST (0) - 这会在每次旋转时放大图层,如果您一遍又一遍地旋转同一图层,结果会变得越来越大。

您想尝试 TRANSFORM-RESIZE-CLIP (1) - 这会将旋转的图层剪辑为原始大小。

剩下的两个选项有点难以理解——你肯定想看看用户手册。顺便说一句,这些选项对于转换工具是通用的。

正如马尔科姆的回答所指出的那样,错误累积的问题仍然存在。您肯定希望通过累积角度旋转原始图层的副本,而不是一遍又一遍地旋转同一图层。

于 2016-12-06T14:52:28.177 回答