如何快速選擇寬度大於長度的圖片?
文件夾里有非常多的圖片。而且類型也是多樣的,包括jpg png bmp等。
請問如何快速的選出裡面寬度大於長度的所有圖片呢?更進一步,如何快速的選出長寬比在指定範圍內的圖片。
原來樓主還有變態要求。。。
樓主又很沒品地喜歡用 GUI 來做這種事情。。。。那就收下這個價值 羊500 的軟體吧更進一步,如何快速的選出長寬比在指定範圍內的圖片。
#coding: utf-8
import os
import commands
import Tkinter as tk
def process(exp):
image_extensions = ("png", "gif", "bmp", "jpg", "jpeg")
# potential BUG, folder or data file with name PNG JPG...
valid_image = lambda f: f.split(".")[-1].lower() in image_extensions
# potential BUG, junk files named .jpg/png... SHOULD check return code first
valid_filter = lambda f, c: eval(commands.getstatusoutput("identify -format "{0}" "{1}"".format(c, f))[1])
files = [f for f in os.listdir(".") if valid_image(f) and valid_filter(f, exp)]
print files
def main():
window = tk.Tk()
window.title("價值羊500的軟體")
text_field = tk.StringVar()
text_field.set("%w &> %h")
tk.Entry(window, width=80, textvariable=text_field).pack()
b = tk.Button(window, text="Do it", command=lambda:process(text_field.get()))
b.pack()
window.mainloop()
if __name__ == "__main__":
main()
如下圖所示,%w 是寬,%h 是高,隨意組合你想要的「變態條件」吧。。。
(知乎是窮瘋了所以已經不讓上傳png了?)我順便想到了一些更具體的過濾條件。。- "%e" == "png" 選出所有png圖片
- "Gray" in "%r" 選出所有黑白圖
具體看這裡啦。。。那麼多參數,總有一款適合你,相信可以滿足你幾年內的所有潛在的變態需求
ImageMagick: Format and Print Image Properties
——廢棄的原答案——
import os
import commands
image_extensions = ("png", "gif", "bmp", "jpg", "jpeg")
# potential BUG, folder or data file with name PNG JPG...
valid_image = lambda f: f.split(".")[-1].lower() in image_extensions
# potential BUG, junk files named .jpg/png... SHOULD check return code
valid_filter = lambda f: eval(commands.getstatusoutput("identify -format "%w&>%h" "{0}"".format(f))[1])
files = [f for f in os.listdir(".") if valid_image(f) and valid_filter(f)]
.
Windows 平台?為什麼不試試 Total Commander 呢?右鍵點擊列表欄即開選擇。Powershell
add-type -AssemblyName System.Drawing
ls *.png,*.jpg,*.jpeg,*.gif |%{ $image = new-object System.Drawing.Bitmap ($_.Name); if($image.Width -gt $image.Height){ cp $_ "new_dir" } }
最低依賴版本,MSYS binutils+coreutils(你們都放不對 Windows 原生的我也來一個
for i in *.png; do # 大小寫?好吧,*.{P,p}{N,n}{G,g}
# 如果不是圖片 grep 那邊會死掉但是 tail 又不會報錯
size=$(file "$i" | grep -Eo "d+ x d+") || continue # 所以你為啥是 PNG
# size=$(tail -n 1 &<&<&< "$size") # 阻止那些文件名故意亂搞的傢伙,好吧 for 直接死了
[ $(cut -d "x" -f 1 &<&<&< "$size") -gt $(cut -d "x" -f 2 &<&<&< "$size") ] echo $i
done
# 稍微考慮一點問題就長了。。
# 此版本不怎麼靠譜,還不如不要考慮錯誤
又拍了一下腦袋——
find | while read i; do
info=$(file "$i" | rev | cut -d ":" -f 1 | rev)
case "$(cut -d "," -f 1 &<&<&< "$info" | tail -c +2)" in
JPEG*) size=$(rev &<&<&< "$info" | cut -d "," -f 2 | rev);;
PNG*) size=$(cut -d "," -f 2 &<&<&< "$info");;
*bitmap*) size=$(rev &<&<&< "$info" | cut -d "," -f 1 | rev);;
*) continue
esac # cut 為什麼還不能倒數
[ $(cut -d "x" -f 1 &<&<&< "$size") -gt $(cut -d "x" -f 2 &<&<&< "$size") ] echo $i
done
# 這次我真不保證腦補有效了。
所以我回來貼C#代碼了www
DirectoryInfo directoryInfo = new DirectoryInfo(textBox1.Text);
FileInfo[] fileNames = directoryInfo.GetFiles("*.*");
foreach (FileInfo fi in fileNames)
{
Image imgPhoto = Image.FromFile(fi.DirectoryName + @"" + fi.Name);
int Width = imgPhoto.Width;
int Height = imgPhoto.Height;
if (Width &> Height)
{
//fi就是啦~~~~
}
mgPhoto.Dispose();
}
比較好的辦法是寫個腳本提取自動分離。找個圖片處理的package把信息讀出來的話,不論是什麼語言都可以挺簡單寫一個的。
基友寫的代碼╮(╯_╰)╭不保證對--------關於py命令的refhttps://github.com/Russell91/pythonpyrequire "shellwords"
Dir.glob("*.{png,jpg,jpeg,gif,bmp,tiff}"){|f|
`exiftool #{f.shellescape}` =~ /Image Size *: *(d+)x(d+)/
puts f if $1.to_i &> $2.to_i
}
ruby + exiftool
Windows 自帶的資源管理器應該是沒辦法,我不知道ACDSEE有沒有這種功能---------------------------------------------------我一般是用NodeJS寫個腳本,遍歷文件夾用這個Package:netroy/image-size · GitHub獲得圖片長寬,比較一下,然後進行不同的操作。
var fs = require("fs");
var sizeOf = require("image-size");
fs.readdir("./", function(err, files){
files.forEach(function(file){
imgSize = sizeOf(file);
if(imgSize.width &> imgSize.height){
console.log("很寬!")
}else if(imgSize.width &< imgSize.height){
console.log("很高!")
}else{
console.log("正方形!")
}
})
})
最近寫了個腳本,和題主需求類似。把圖片按照高是否大於寬分發的兩個子文件夾中。
我把這個腳本掛載到了我的壁紙收藏夾,這樣,只要我往裡邊一丟圖片,就自動分好類了。非常可惜,這個腳本只適用於 OS X 。Future-Gadgets-Project/Image - Classify Vertical Horizontalls拿到文件名後批量編輯成img標籤寫進一個html文件里,然後用jQuery或者js處理,完全圖形化!對不起了樓上的各位…
推薦閱讀:
※為什麼讀10MB的TXT文件那麼慢,而打開1G的視頻卻很快?
※文件很多很雜,求國產雲同步軟體推薦?
※對數量龐大的照片進行分類管理,最好的方便檢索的方法是什麼?
※Windows Phone 8.1 的 Files 文件管理功能有什麼用?