如何快速選擇寬度大於長度的圖片?

文件夾里有非常多的圖片。而且類型也是多樣的,包括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)]

需要安裝神器 ImageMagick,每個需要處理圖片的人都需要它


.

Windows 平台?為什麼不試試 Total Commander 呢?

右鍵點擊列表欄即開選擇。

需要特定縱橫比?來看看 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();
}

正在使用中2333[好醜....


比較好的辦法是寫個腳本提取自動分離。找個圖片處理的package把信息讀出來的話,不論是什麼語言都可以挺簡單寫一個的。

基友寫的代碼╮(╯_╰)╭不保證對--------

關於py命令的ref

https://github.com/Russell91/pythonpy


require "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 Horizontal


ls拿到文件名後批量編輯成img標籤寫進一個html文件里,然後用jQuery或者js處理,完全圖形化!

對不起了樓上的各位…


推薦閱讀:

為什麼讀10MB的TXT文件那麼慢,而打開1G的視頻卻很快?
文件很多很雜,求國產雲同步軟體推薦?
對數量龐大的照片進行分類管理,最好的方便檢索的方法是什麼?
Windows Phone 8.1 的 Files 文件管理功能有什麼用?

TAG:圖片 | 文件管理 | 數據查找 |