如何批量将图像的一部分移动到该图像的另一部分?宏图像编辑?

如何批量将图像的一部分移动到该图像的另一部分?宏图像编辑?

不要被标题所困惑,我的问题并不太复杂:

我想将图片的一部分移动到图片内的另一个位置,但要批量移动(6000 张图像)。具体来说,我想将顶部的水平条移动到图片的底部。

恕我直言,这可以通过三种方式实现:

  • a. 选择水平部分,然后剪切并粘贴,或
  • b. 选择水平部分,然后将其拖放到其他位置,即图片的底部。
  • c. 将每张图片拆分成两张图片,然后将它们合并为“层”,这也有点贵。是的,我可以用一些软件做到这一点,但是,我想对 6000 张图片进行这样的操作,所以,这是一个批处理过程。

我不介意只是复制或移动部分内容。我可以轻松裁剪掉旧部分。

我尝试了几个图像编辑器,但到目前为止,它们都不能满足我的要求。几乎所有这些编辑器都可以将水平条移到底部,但不能批量移动。GIMP 最接近这个功能,但我不知道如何在 GIMP 中录制宏,也不知道如何在宏中完成所有操作。

到目前为止我所做的是:

  • 阅读有关 GIMP 中的 Python 和 Script-Fu 的知识,但这有点超出我的理解范围,因为我不是一名程序员。(我确实设法将按键添加到粘贴到选择内容功能,因此解决方案是 {1} 选择,Ctrl-C,移动,Ctrl-Shift-B)
  • 尝试一些图像编辑器,但它们任何一个无法进行批量处理,或者可以,但是没有剪切和粘贴功能,更不用说拖放了。

我并不执着于 GIMP,所以如果你有其他解决方案,请告诉我。我之所以提到它,是因为它似乎是唯一一款具有宏功能的产品。但到目前为止,我还没有在 Gimp 中找到它们。

理想情况下,命令行解决方案是录制或编写脚本,然后执行以下命令:

C:\>GIMPDir\gimp move-pic-script.scr *.jpg 

...其中脚本包含以下内容:打开图像、选择区域、复制区域、移动到底部、粘贴、保存和关闭图像。

如果可能的话,如果其他条件都一样,我更愿意选择免费软件解决方案。谢谢。

编辑:图像为 352 x 276 像素,352 x 36 像素的水平条需要再次移动到 352 x 36 的底部。操作系统是 Windows 10

编辑2:我在堆栈溢出上找到了这个命令

(gimp-image-select-rectangle image operation x y width height)

所以我想就我的情况来说

(gimp-image-select-rectangle *.jpg operation 0 0 352 36)

可能是我可以使用的一个脚本的开头...但是,我不知道上面一行中的“操作”是什么意思。其他未知的是复制选择, 为了移动选择以及粘贴到选定内容以及保存和关闭文件。

编辑 3 以添加 Bing AI 提供给我的信息:

是的,我“作弊”了,向 Bing AI 询问了以下问题:

您能否用 Script-Fu 为 GIMP 编写一个脚本,执行以下步骤:
步骤 1,选择图像中的矩形。
步骤 2,将该选择复制到剪贴板。步骤 3,将该选择粘贴到同一图像中的另一个区域。步骤 4,保存更改后的图像?

它的答案是.... 正在搜索:Script-Fu GIMP 脚本选择图像内的矩形 Script-Fu GIMP 脚本将选择复制到剪贴板 Script-Fu GIMP 脚本将选择粘贴到同一图像内的另一个区域 Script-Fu GIMP 脚本保存修改后的图像

当然!下面是 Script-Fu for GIMP 中的一个脚本,它可以执行您提到的步骤:

    (define (my-script-fu-script image drawable)
      (let* ((x 100) ; x-coordinate of the top-left corner of the rectangle
             (y 100) ; y-coordinate of the top-left corner of the rectangle
             (width 200) ; width of the rectangle
             (height 150) ; height of the rectangle
             (selection-channel (car (gimp-image-get-selection image))))
        ; Step 1: Selecting a rectangle within an image
        (gimp-image-select-rectangle image CHANNEL-OP-REPLACE x y width height)
        
    ; Step 2: Copying that selection to the clipboard
    (gimp-edit-copy drawable)
    
    ; Step 3: Pasting that selection to another area within the same image
    (gimp-edit-paste drawable TRUE)
    
    ; Step 4: Save the altered image
    (gimp-file-save RUN-NONINTERACTIVE image drawable "path/to/save/your/altered/image.png" "path/to/save/your/altered/image.png")
    
    ; Clean up the selection channel
    (gimp-image-remove-channel image selection-channel)))

; Register the script with GIMP
(script-fu-register "my-script-fu-script" ; Name of the script
                    "<Image>/Filters/My Scripts/My Script-Fu Script" ; Menu location for the script
                    "Description of my Script-Fu script" ; Description of the script
                    "Your Name" ; Author name
                    "Copyright information" ; Copyright information
                    "Date" ; Date of creation/modification
                    "" ; Menu label for the script
                    SF-IMAGE "Image" 0 SF-DRAWABLE "Drawable" 0)

; Run the script by going to Filters > My Scripts > My Script-Fu Script in GIMP.

我仍然对如何正确获取路径语法等有疑问,但我想这会有所帮助.... ;-)

答案1

这是一段宇多田光演唱歌曲“Colors”的视频剪辑。如您所见,原始图片有字幕和副标题,目标是将字幕移到图片下方,这样它们就都是字幕了。使用 GIMP,剪切和粘贴字幕对于我的 GIMP 技能水平来说太难了,我的 GIMP 技能水平基本为零。

解决方案是问题中提到的方法“c”,它涉及使用 XNview 分离超级标题,并使用 ImageMagick 重新连接它们。

具体来说:

  • 使用任何程序提取所有帧(7072)。我使用了 VirtualDub,菜单文件|导出|图像序列。使用 Ctrl-p 将压缩设置为未压缩

  • 在 XNView 中加载所有图像(Ctrl-U,转换选项卡,选择“剪切”,设置 X、Y、宽度和高度

  • 将所有超级标题重命名为“Name0000-B.jpg”,并将其余标题重命名为“Name000-A.jpg”

  • 在 ImageMagick 的命令行中使用以下行 7072 次:

    magick convert -append Name0001-A.jpg Name0001-B.jpg Name0001.jpg

    magick convert -append Name0002-A.jpg Name0002-B.jpg Name0002.jpg

    magick convert -append Name7072-A.jpg Name7072-B.jpg Name7072.jpg

  • 诀窍是使用减去 附加选项,而不是加上附加选项。+ 将把两张图片并排添加,而不是像这里需要的那样叠加在一起。

就是这样!

这可能是一个粗糙而复杂的解决方案,最大的优点是,它有效,而且是免费软件。就这样。尽管我之前发现过 ImageMagick,但我还是应该提到 @Gantendo,因为他也建议使用它。

这是原始图片

这就是目标,图像应该是什么样子

相关内容