2012-01-03 139 views
38

我有一个图像文件夹,覆盖4MB - 我们称之为dsc_big/。我想使用convert -define jpeg:extent=2MB将它们转换为2MB,并将dsc_big/*复制到已存在的文件夹dsc_small/使用ImageMagick将图像批量调整到新文件夹

我试过convert dsc_big/* -define jpeg:extent=2MB dsc_small/,但是会产生图像,称为-0,-1等等。

我该怎么办?

回答

48

convert旨在处理单个输入文件,据我所知,虽然我不得不承认我不明白你得到的输出。 mogrify是在下面的风格更适合于批量处理:

mogrify -path ../dsc_small -define jpeg:extent=2MB dsc_big/* 

但老实说,我认为这是危险的,一般使用(它会覆盖原来的图像,如果你忘记了-path),所以我总是用convert再加上for循环这样的:如果你在当前目录中处理文件

for file in dsc_big/*; do convert $file -define jpeg:extent=2MB dsc_small/`basename $file`; done 

basename通话是没有必要的。

+0

另外我怎样才能用'mogrify'来做到这一点? – tekknolagi 2012-01-03 04:48:24

+2

我添加了一个小例子,显示了mogrify和一个链接。 – 2012-01-03 04:52:54

+1

ImageMagick 6.8.0可以使用convert:'convert * .jpg * .png'处理多个文件。但是我不知道如何处理输出文件名,因为ImageMagick只是将名称设置为序号(即:1.png,2.png,3.png等) – 2013-09-12 16:30:46

1

虽然这是一个古老的问题,但我添加了这个反应,为其他任何人的利益,绊倒这一点。

我有完全相同的问题,并通过使用mogrify气馁,我编写了一个名为easymagick而在内部使用convert命令使这个过程更容易小型基于Python的工具。

请注意,这仍然是一项正在进行的工作。我会很感激我能得到的任何反馈。

0

这对我的作品

convert -rotate 90 *.png rotate/image.jpg 

产生图像0.jpg,图像1.JPG,图像2.JPG .....在 '旋转' 文件夹。不知道保存原始文件名的方法。

+0

使用'mogrify -path rotate -rotate 90 * .png' – 2015-05-29 09:34:04

0

我发现cd -ing到所需的文件夹,然后使用bash全局变量$PWD使我的convert不会引发任何错误。我正在利用ImageMagick最近实现的caption:http://www.imagemagick.org/Usage/text/#caption函数来标记我的图像与基本文件名,并将它们放在第一个目录中的另一个目录中。

cd ~/person/photos 
mkdir labeled 
for f in $PWD/*.JPG; do 
    width=$(identify -format %w $f) 
    filename=$(basename $f .JPG) 
convert -background '#0008' -colorspace transparent -fill white -gravity center -size ${width}x100 caption:"${filename}" ${f} +swap -gravity south -composite "$PWD/labeled/${filename}.jpg"; 
done 
+0

考虑在宽度开始的行中使用''$ f“'而不是'$ f' = ...'和'filename = ...'以防文件名中包含空格。 – 2015-12-16 00:56:57

4

这是长期尝试后帮助我的命令。 我想从宽大,高度可变的大图像列表中制作相同大小的缩略图。这是为了创建一个画廊页面。

convert -define jpeg:size=250x200 *.jpg -thumbnail 250x200^ -gravity center -extent 250x200 crop/thumbnail-%d.jpeg 

我得到了所有具有相同的宽度和高度的重新缩小的缩略图。 :)感谢ImageMagick。

1

这里有一个解决方案使用循环在控制台上

convert *.jpeg -define jpeg:extent=2MB -set filename:f '../dsc_small/%t_small.%e' +adjoin '%[filename:f]' 

PS:如果版主删除我的答复为“重复回答”一次,我从来没有在堆栈溢出发布一次。阅读解决方案,这是不是相同的任何其他解决方案,这一个不使用控制台上的循环,并使用ImageMagick像发布问题的人请求。如果必须删除一个答案,继续删除使用其他软件包的答案,因为他们实际上没有回答这个问题

相关问题