我正在尋找一種方法來查找(1)具有最小寬度和(2)最小高度的文件,並顯示這些數字(最好是命令行,Linux或Windows)。我不知道要使用什麼工具,但我認爲Perl的一個包可能具有這種功能。在Perl中查找具有最小寬度和高度的jpg
回答
下面是一個完整的Perl程序,可以按照您的要求進行操作。您可能必須安裝Image::Magick
,因爲它不是核心模塊。就目前而言,程序將檢查當前工作目錄中結尾爲.jpg
的所有文件。您可能需要將呼叫更改爲glob
以檢查不同目錄中的文件或不同的文件類型。
use strict;
use warnings;
use Image::Magick;
my %data;
for my $jpg (glob '*.jpg') {
my $magick = Image::Magick->new;
$magick->Read($jpg);
$data{$jpg} = { map { $_ => $magick->Get($_) } qw/ width height/};
}
my ($least_width, $least_width_file);
my ($least_height, $least_height_file);
while (my ($jpg, $info) = each %data) {
unless ($least_width and $least_width <= $info->{width}) {
($least_width_file, $least_width) = ($jpg, $info->{width});
}
unless ($least_height and $least_height <= $info->{height}) {
($least_height_file, $least_height) = ($jpg, $info->{height});
}
}
print "\n";
printf "File with least width (%d) is %s\n", $least_width, $least_width_file;
printf "File with least height (%d) is %s\n", $least_height, $least_height_file;
更新
,關注@ nwellnhof的建議,並使用Image::Size
代替Image::Magick
,則應更換use
語句和for
循環用下面的代碼。
use Image::Size qw/ imgsize /;
my %data;
for my $jpg (glob '*.jpg') {
@{ $data{$jpg} }{qw/ width height /} = imgsize($jpg);
}
更新
該版本增加了一些統計信息輸出的要求。它使用List::UtilsBy
模塊來更簡潔地查找最小的文件。這不是一個核心模塊,可能需要安裝。
use strict;
use warnings;
use Image::Size qw/ imgsize /;
use List::UtilsBy qw/ min_by /;
my %data;
for my $jpg (glob '*.jpg') {
@{ $data{$jpg} }{qw/ width height /} = imgsize($jpg);
}
my @least_width_files = min_by { $data{$_}{width} } keys %data;
my $least_width = $data{$least_width_files[0]}{width};
my @least_height_files = min_by { $data{$_}{height} } keys %data;
my $least_height = $data{$least_height_files[0]}{height};
print "\n";
if (@least_width_files == keys %data) {
printf "All files have a width of %d\n", $least_width;
}
else {
my $n = @least_width_files;
printf "%d file%s %s the least width of %d:\n", $n, $n == 1 ? ('', 'has') : ('s', 'have'), $least_width;
print " $_\n" for @least_width_files;
}
print "\n";
if (@least_height_files == keys %data) {
printf "All files have a height of %d\n", $least_height;
}
else {
my $n = @least_height_files;
printf "%d file%s %s the least height of %d:\n", $n, $n == 1 ? ('', 'has') : ('s', 'have'), $least_height;
print " $_\n" for @least_height_files;
}
在Linux上,我只是從命令行使用ImageMagick。您可能需要(例如用在sudo apt-get install imagemagick
Ubuntu的),先安裝它:
narrowest=$(identify *jpg | sort -nr -k3 | tail -n 1 | cut -d\[ -f1)
shortest=$(identify *jpg | sort -tx -nr -k2 | tail -n 1 | cut -d\[ -f1)
在Windows上,這不是除非你安裝Cygwin或東西的選項。
在Linux和Windows上,您都可以使用Image::Magick
模塊從Perl訪問該功能,但您必須自己安裝該模塊。請參閱Borodin的代碼答案。
在Perl中,你可以使用[圖像:: Magick(http://p3rl.org/Image::Magick)。 – choroba 2014-10-31 20:46:50
我會爲該任務推薦模塊Image::Size
。與像Image::Magick
這樣的全功能圖像處理庫相比,它不會將整個圖像解壓縮並將其讀取到內存中,以獲取其大小。所以它應該更快,更少的內存,特別是對於大型圖像。
東西沿着以下行應該工作:
use strict;
use warnings;
use Image::Size;
my ($min_width, $min_height);
for my $filename (glob '*.jpg') {
my ($width, $height) = imgsize($filename);
$min_width = $width if !defined($min_width) || $width < $min_width;
$min_height = $height if !defined($min_height) || $height < $min_height;
}
if (defined($min_width) && defined($min_height)) {
print "Minimum width: $min_width\n";
print "Minimum height: $min_height\n";
}
else {
print "No images found\n";
}
很棒!我在Windows上安裝Image :: Magick時遇到了問題。你的解決方案非常快,並且完成這項工作。非常感激! – menteith 2014-11-02 17:56:39
我也很感激,如果你可以添加兩個twings。首先,腳本可以顯示文件的名稱(最小寬度和最高)。其次,所有文件具有相同寬度和高度(如果是這種情況)的信息也會非常好。 – menteith 2014-11-02 18:03:31
@menteith StackOverflow不是其他人可以免費解決所有問題的網站。你的問題的答案應該爲你提供足夠的細節來完成工作。 – nwellnhof 2014-11-02 21:04:41
- 1. jQuery,具有固定高度和最小可能寬度的div
- 2. 具有多個值的最小/最大寬度/高度
- 3. 元素寬度/高度是否小於最小寬度/最小高度?
- 4. Uploadify最小圖像寬度和高度
- 5. 2列,最小寬度和100%高度
- 6. Carrierwave和mini_magick查找寬度和高度
- 7. 如何在clojure中查找具有quil的圖像的寬度和高度
- 8. 具有百分比高度和最小高度的模態
- 9. css最小寬度和最大寬度?
- 10. @media最小寬度和最大寬度
- 11. Silverlight中的最大寬度和高度
- 12. css最小寬度和最小高度不起作用
- 13. 最小高度和最小寬度應該始終等於
- 14. 最小高度和最小寬度都不盡如人意
- 15. 寬度和最小寬度的使用
- 16. 最小寬度和最大寬度的CSS媒體查詢
- 17. 最小寬度,最大寬度的CSS使用最小寬度
- 18. PHP - 上傳圖像與具有最大寬度和高度
- 19. 最小寬度/高度陣營天然
- 20. 設置最小高度等於寬度
- 21. 如何在OpenCV中查找矩形的高度和寬度?
- 22. 在cocos2d中查找縮放圖像的寬度和高度
- 23. 查找可在ImageView中顯示的圖像的最大高度和寬度
- 24. 表格屬性的最小寬度和最大高度
- 25. CSS寬度和最小寬度
- 26. 告訴我不同之處b/w只是寬度和高度以及(最大/最小)寬度和高度?
- 27. 在窗口調整大小設置最小高度和最小寬度
- 28. CSS具有最小高度的容器的100%高度
- 29. jqplot:寬度,高度,標籤位置,最小和最大值
- 30. 得到最小寬度和最小設備寬度的同時
感謝!我將在明天在Windows和Linux上檢查並告訴結果。 – menteith 2014-11-01 20:07:34
如果你只關心圖像大小,我發現['Image :: Size'](https://metacpan.org/pod/Image::Size)是一個優秀的,更輕量級的模塊。 – nwellnhof 2014-11-02 12:48:11
@nwellnhof:我認爲你應該把它寫成解決方案 – Borodin 2014-11-02 13:42:55