Docela hodně fotím a často potřebuji hromadně otočit a zmenšit velkou kupu různých fotek. Určitě nejsem sám a tak nabízím malý návod, jak na to v Linuxu rychle a jednoduše.
Často se mi stává, že nafotím velkou sérii fotek, kterou pak potřebuji otočit, zmenšit a třeba poslat přes internet. Abych se nemořil s několika stovkami fotek třeba v Gimpu, našel jsem si nástroje, které to vše zvládnou za mě.
Lepší foťáky mají čidlo, které jim v době focení řekne, v jaké poloze jsou. Tu informaci pak zapisují do ExIF. Dá se kdykoliv později získat a automaticky s ní pak můžete fotku otočit. Já k tomu používám program jhead
ze stejnojmenného balíku (v Debianu). Použití je jednoduché:
$ jhead -autorot *
Zajistí automatické otočení fotek v aktuálním adresáři.
Velmi často po mě někdo chce také fotky zmenšit a poslat. Obvykle to znamená je zatarovat a uploadnout na server nebo přímo do nějaké galerie. Pro automatické zmenšování používám program convert
z balíčku ImageMagick.
Napsal jsem si malý skript, který v aktuálním adresáři vytvoří podadresář zmensene
a do něj nazmenšuje všechny fotky, které najde opět v aktuálním adresáři. Skript je opravdu jednoduchý:
#!/bin/bash
mkdir zmensene
for soubor in *.jp* ; do
convert $soubor -resize 800x600 -quality 80 zmensene/$soubor
done
Klíčový je samozřejmě předposlední řádek, kde je nastaveno rozlišení a kvalita výsledného obrázku. Parametry si samozřejmě můžete změnit dle aktuální potřeby. U rozlišení je výhoda, že convert
automaticky zachovává poměr stran zdrojové fotografie, přičemž nepřekročí ani jeden z uvedených rozměrů. Vůbec tedy nevadí, že má fotka jiný poměr nebo je na výšku. U mě tedy skript běžně dělá rozměry 800×533 nebo 400×600.
[2] GIMP se na to da pouzit velmi dobre, jelikoz ten take umi sve akce skriptovat a to hned v nekolika jazycich.
ad clanek: po zmenseni je dobre provadet unsharp mask kvuli rozostrovaci povaze zmensovaciho operatoru (coz je obvykle bikubicky).
ja jsem kdysi dal dohromady toto na generovani "thumbnailu"
cat "$soubor" | \
mogrify -size 150x150 -resize 150x150 \
-unsharp "1" +profile "*" jpeg:- | \
montage -background black -geometry 150x150 \
jpeg:- jpeg:- \
> preview/"$soubor"
(staci upravit rozmery podle potreby)
inak ak potrebujete nahlady na filmy, odporucam mtn (http://moviethumbnail.sourceforge.net/)
ja tam jeste pridavam Copyright do Exifu takze to delam perlem:
#!/usr/bin/perl
use Image::ExifTool;
my $exifTool = new Image::ExifTool;
my $options = "-interlace Line -quality 85";
$exifTool->Options(Duplicates => 0 , PrinConv => 0);
$rotate[8]=" -rotate -90";
$rotate[6]=" -rotate 90";
$rotate[1]="";
opendir(DIR, '.') || die "can't opendir $some_dir: $!";
@files = grep { /\.jpg/ } readdir(DIR);
foreach $file (@files){
$exifTool->ExtractInfo($file);
$orientation= $exifTool->GetValue('Orientation','ValueConv');
#print " $orientation ". $exifTool->GetValue('Orientation')."\n";
$command="convert $options ".$rotate[$orientation]." -resize '800x600>' $file xx/$file";
print $command."\n";
system $command;
$exifTool->SetNewValue(Copyright => 'photo@xxxxx.cz', Replace => 1);
$exifTool->WriteInfo("xx/$file");
}
closedir DIR;
Podle meho soudu je daleko lepsi nez ImageMagick pouzivat NConvert, komandlajnoveho brasku programu XnView. Verze jsou pro Windows i Linux a narozdil od XnView se NConvert pro Linux i vyviji. Neumi sice asi tolik vychytavek, ale na fotky (a nejen na ne, zaplat za nej pambu pri hromadne sprave perovek) staci s prehledem. A je vyrazne rychlejsi, i kdyz to neni zase tak tezke, ImageMagick je slimak. Problem je, ze XnView ani NConvert nejsou FOSS, ale jen freeware (pro osobni potrebu, za komercni pouziti je treba zaplatit). Povazuju za ostudu komunity okolo FOSS, ze nedala dohromady neco lepsiho nez vyvojar XnView, jeden jediny clovek. Uvidime, co prinesou gegl a babl, na ktere se moc a moc tesim (hlavne kvuli CMYKu, ktery XnView neumi).
Neni ani treba for lop, staci proste a jednoduse
<code>
convert *.jp* -resize 800x600 -quality 80 zmensene/
</code>
Aspon tak ja to delam ve Windows :-), aspon poku dmne pamet neklame.
Jiste, kdybys potreboval nejake dalsi operace se jmenem souboru (treba vystup do souboru %OLDNAME%_th.jpg ve stejnem adresari), je for loop nejspis lepsi.
ja to napsal v pythonu :)
#!/usr/bin/python
import Image, os, math
def zmenVelikost (nazevSouboru, rozliseni):
dirname = "thumbs"
try:
os.mkdir(dirname)
except:
pass
novyNazev=os.path.join(dirname,nazevSouboru.replace(".jpg", "_thumb.jpg"))
try:
os.path.getsize(novyNazev)
print "Soubor \"%s\" jiz existuje nebudu prevadet!" %(novyNazev)
except:
print "Prevadim %s na %s" %(nazevSouboru, novyNazev)
try:
vstupniObrazek = Image.open(nazevSouboru)
xsizeOld, ysizeOld = vstupniObrazek.size
ratio = rozliseni/xsizeOld
ysize = int(round(ysizeOld*ratio, 0))
xsize = int(rozliseni)
# print "Debug:", xsizeOld, ysizeOld, rozliseni, ysize
vystupniObrazek = vstupniObrazek.resize((xsize, ysize), Image.ANTIALIAS)
vystupniObrazek.save(novyNazev)
except IOError:
print "Nelze vytvorit zmeneny obrazek pro ", nazevSouboru
print "Splneno..."
rozliseni = (200.0) #udava se velikost jedne hrany
for filename in os.listdir("."):
if not filename.endswith(".jpg"):
continue #preskoc na dalsi soubor (preskoc jednu smycku)
zmenVelikost(filename,rozliseni)
dohaje to smazalo taby :(
takze odkaz:
http://marenka.sh.cvut.cz/~scarab/configuraky/imageresize.py
Dlouho jsem řešil jak umožnit i svojí ženě jednoduše měnit velikost obrázků. Nakonec to vyřešilo toto http://www.kde-apps.org/content/show.php?content=11505 Pokud někdo hledá jednoduché GUI řešení tak bych to doporučil.
Pokud se nebojíte Photoshopu ve Wine, tak tady je můj skriptík v Javascriptu. Zmenšuje to po kouskách a pokaždé trochu doostří. Dá se pustit na jeden obrázek, volat z dávky atp. Dělá to ještě pár "administrativních" věcí navíc. Omluvte kvalitu kódu, je Javascript moc neumím;)
#target photoshop
app.bringToFront();
app.displayDialogs = DialogModes.NO;
var resampleMethod = ResampleMethod.BICUBIC;
var destMode = ChangeMode.RGB;
var destBitDepth = BitsPerChannelType.EIGHT;
var destProfile = "sRGB IEC61966-2.1";
var recipes1 = [["4300px", 20], ["2800px", 30], ["1300px", 20], ["800px", 10]];
var recipes2 = [["3800px", 20], ["2300px", 30], ["1300px", 20], ["800px", 10]];
var recipes3 = [["3300px", 20], ["2300px", 30], ["1300px", 20], ["800px", 10]];
var recipes4 = [["2800px", 20], ["1800px", 30], ["1300px", 20], ["800px", 10]];
var recipes5 = [["2300px", 20], ["1800px", 30], ["1300px", 20], ["800px", 10]];
var recipes6 = [["1800px", 30], ["1300px", 40], ["800px", 10]];
var recipes7 = [["1300px", 50], ["800px", 30]];
var recipes8 = [["800px", 90]];
var recipes9 = [];
function selectRecipes(size) {
var px = size;
px.convert("px");
var value = px.value;
if (value > 4500)
return recipes1;
else if (value > 4000)
return recipes2;
else if (value > 3500)
return recipes3;
else if (value > 3000)
return recipes4;
else if (value > 2500)
return recipes5;
else if (value > 2000)
return recipes6;
else if (value > 1500)
return recipes7;
else if (value > 800)
return recipes8;
else
return recipes9;
}
function resizeWidth(doc, width) {
doc.resizeImage(width, null, null, resampleMethod);
}
function resizeHeight(doc, height) {
doc.resizeImage(null, height, null, resampleMethod);
}
function shrink(doc, recipes, resizer) {
var layer = doc.artLayers[0];
for (i = 0; i < recipes.length; i++) {
var size = recipes[i][0];
resizer(doc, size);
var amount = recipes[i][1];
layer.applyUnSharpMask(amount, 1, 0);
}
}
function main(doc) {
doc.flatten();
doc.resizeImage(null, null, 300, ResampleMethod.NONE);
doc.changeMode(destMode);
doc.convertProfile(destProfile, Intent.PERCEPTUAL, true, false);
doc.bitsPerChannel = destBitDepth;
if (doc.height <= doc.width) {
shrink(doc, selectRecipes(doc.width), resizeWidth);
} else {
shrink(doc, selectRecipes(doc.height), resizeHeight);
}
}
if (app.documents.length != 0) {
main(app.activeDocument);
} else {
alert("No open document!");
}
[28] Už jsem to psal jednou. Pokud hledáte nějaký jednoduchý nástroj který zvládne i ženská tak doporučuji http://www.kde-apps.org/content/show.php?content=11505. Jednoduše v KDE označíte fotky, pravym tlačítkem zobrazíte nabídku a vyberete zmenšit na požadovaný rozměr. Umí takhle jednoduše i konvertovat do jiných formátů, otáčet apod.
[28]: to je asi ten povestny rozdil mezi klikacim a cmdline pristupem. Z prikazoveho radku, pripadne skriptem a jednou sadou SW - treba tim imgmagickem - proste zvladnes spoustu ruznorodych davkovych operaci. Klikac potrebuje, jak uz rikas sam, "na kazdou ulohu nejakou trivialni aplikaci". Jenze chci si ja svinit pocitac "trivialni aplikaci" na kadou ulohu ktera mne kdy napadne? Moc ne... Tedy jako uzivatel Windows obcas "musim", ale co muzu vyresit z cmdline softem, ktery uz mam, to tak take vyresim.
[38] v1kt0r
Samozřejmě je to o přístupu. Já bych vzal MS Office Picture Manager, který je na každé instalaci Office (tedy prakticky na každém stroji), vybral fotky, řekl že je chci exportovat do jiného formátu a rozlišení, nastavil jména (třeba s_původní-jméno), a kliknul na OK. Případně bych použil jiný GUI tool, který umí pracovat s obrázky (ořez, změna velikosti atd) - je jich hromada. Rozhodně bych nepsal skript. Většina lidí nepíše skripty proto, že to neumí, nikdy umět nebude, a počítače je (na rozdíl třeba od těch fotek) vlastně nezajímají. Já proto, že jsem zvyklý dělat jednoduché věci jednoduše.
Ještě k tomu "svinění počítače". Lidé tu píšou, že lze použít třeba GTHUMB. Ten by měl být, na rozdíl od ImageMagick, na každé instalaci Gnome. Proč tedy "svinit počítač" ImageMagickem, když už máte GTHUMB, který umí resize, ořez apod. (snad) pohodlně z GUI?
Pochopitelně vyjma GUI lze použít command line (ImageMagick), nebo skriptovat (.NET imaging). Pro ilustraci obdoba skriptu z článku, tentokrát pro Windows shell (cmd.exe):
mkdir zmensene
for %i in (*.jp*) do @convert %i -resize 800x600 -quality 80 zmensene\%i
[41]
> Já bych vzal MS Office Picture Manager, který je na každé instalaci Office (tedy prakticky na každém stroji)...
Prakticky na každém stroji, říkáte, hmm ... zajímavé. Našli by se jistě lidé, kteří by se vám pokoušeli vysvětlit, že na řadě těch strojů by třeba nešly nějaké ty Office kvůli své tragické neportovatelnosti ani nainstalovat. Možná by se našli jiní, kteří by vám tvrdili, že ani tam, kde by technicky nainstalovat šly, často nejsou, protože si uživatel za ty prachy raději koupí něco užitečného. A třeba někdo další by se pustil do vysvětlování, že i když tam ty Office jsou, neznamená to nutně, že jsou nainstalovány kompletně všechny součásti ale třeba jen Word a Excel. A možná, že nakonec by se vám někdo ještě navíc snažil osvětlit, že skriptovatelnost je ideální vlastnost k dosažení automatizace procesů. Ale já ne, byl by to zbytečně ztracený čas.
[43] duane
Zrovna MS Office mi přijde "tragicky" portovatelný software. Proč by jinak historicky existovaly verze pro Win16, MacOS/Motorola, MacOS/PowerPC, MacOS/Intel, Win32/Intel, Win32/Alpha, Win32/MIPS a Win32/PowerPC (v případě ne-Intel Win32 to pravda nebyly všechny části Office)?
Samozřejmě existuje jisté množství desktopů, které jedou na Linuxu, FreeBSD, Solarisu, a kdo ví čem ještě. Je jich ale tak málo, že je téměř vyloučeno je "tam venku" potkat. A samozřejmě jsou i instalace Windows bez MS Office, byť jich není moc. Jak jsem psal, v takovém případě je tu řada nástrojů typu GTHUMB, Google Picasa apod., ve kterých lze úpravy provést.
Vám by někdo zase mohl vysvětlit, že jednoduché věci se s počítačem dělají jednoduše. To, že lze věci skriptovat, není nic nového.
IMO v Linuxu na BATCH je najlepší PHATCH.
http://photobatch.stani.be/
Prednedávnom sa mi dostal do povedomia musím povedať že to je pecka napriek tomu že je to verzia 0.1.
Vie to zmenšovať -> otčať -> pridávať rôzne efekty ako dodatočné ostrenie, blur, oblé rohy, vodoznak a pod...
[30] Thommm
Dík, hezký seriál, ale měl jsem na mysli scriptování v Gimpu :)
[45]pht
Ok, dík. Nakonec poradil kamarád Google :) Mohlo mě to taky napadnout dřívv. Něco se dá najít třeba na http://www.root.cz/clanky/gimp-scriptfu-skriptovani-nebo-bojove-umeni/
nebo na http://docs.gimp.org/2.2/cs/index.html.
V práci (pod Windows) jsme na tohle používali (zadarmo) JPEG Resampler (www.macek.cc) - uměl právě to co je zde požadováno - levým myšítkem kliknout na obrázek nebo adresář, spustit a nastavit (GUI) požadované parametry (např. podle větší strany, podle celkového počtu pixelů (2MP, 3MP,...), podle výsledné velikosti, ...), s tím, že si pamatoval ty poslední.
Nedávno jsem narychlo potřeboval něco zmenšit a protože jsem nevěděl o ničem podobném pro Linux, tak jsem to spustil ve Wine - musel jsem sice "mechanicky" vybrat zdrojový a cílový adresář (takže ono "levé myšítko se nekonalo), ale jinak OK.
Každopádně tipy zde vyzkouším :-)
1) Zmenšování fotek je pro mě trochu z nouze ctnost, protože jsem pro Linux ještě nenašel takový prohlížeč obrázků, který by 10 Mpx fotky prohlížel stejně rychle jako ACDsee (na stejném HW).
2) Fotky chci většinou vidět, takže stejně mám spuštěný nějaký prohlížeč a otevřený adresář, kde ty fotky jsou, v programech KDE se hromadné zmenšování fotek dělá pohodlně.
3) Skript s tím convertem mám, zmenšuje mi fotky na web a ve stejném cyklu dělá i náhledy, to se občas hodí.
...ve kterém vyberete hromadu obrázků...
To je u lidí kteří preferují CL právě ten důvod. Ve vizuálním nástroji se objekty (fotografie) vybírají jiným způsobem než v CL. V GUI selektivně vyberete přímým určením konkrétní objekty, ale v CL použijete například nějakou masku nebo příkaz pro výběr množiny objektů (třeba vyberete všechny z listopadu 2008, nebo všechny co jsou menší než 100KB).
Další důvod je to, že takovéto věci se dělají opakovaně. Takže jsem si opravdu mnohem raději napsal makefile, a když stáhnu fotky z foťáku, tak jen napíši "make" a veškerou práci, kterou bylo možno zautomatizovat za mne udělá počítač, nejlépe na pozadí, a pak sám skončí -- nemusím "otevřít program na fotky, ručně vybrat tyhle a tamty a kliknout a nejspíš i vybrat kam uložit výsledek a potvrdit to a pak čekat až se to udělá a pak zavřit program na fotky". Tohle je "práce". Když to udělá skript, dělá se to "samo". A napsat ten skript je zábava.
[57] Ash
To záleží na tom, jaké máte GUI. V chytrém GUI kliknete na sloupec Size (nebo Velikost, pokud chcete lokalizaci), tím je setříděno, a pak jen vyberete ty správně veliké. Podobně s datem pořízení fotografie.
Samozřejmě jsou i případy, kdy se hodí skript. Ovšem protože fotografie stejně musíte "ručně" vidět, probrat a upravit (ostrost, kontrast, barvy, ořez), moc práce vám neušetří. A když už děláte zbytek akcí v grafickém prostředí (těžko ořezávat něco, co nevidíte, i když výjimky existují), v nejhorším to skončí skriptem v GUI. K tomu máte v každém lepším bitmapovém editoru batch processing (minimálně Adobe Photoshop a Corel PHOTO-PAINT), a většinou i podporu skriptování.
Psát skripty mi nepřijde zábavné, ale potrhlé, dokud mohu dosáhnout výsledku jednodušším způsobem. Ale vnímám, že je to do velké míry věc přístupu.
Pokud sem náhodou zabloudí někdo z windows:
Já na toto používám už nějakou dobu faststone.
Primárně je to prohlížeč obrázků, ale naprosto pohodlně umí s obrázky provést hromadně prakticky jakoukoliv akci, počínaje resize a konče watermarkem.
Pokud jde o nároky na paměť, tak během akce (resize) bere cca 40-50MB RAM.
A rychlost.. samozřejmě podle okolností. U mě na 2 roky staré mašině trvá zmenšení stovky 6MPx fotek na 800x600 asi 2-3 minuty.
Na webu píšou: Free for Home Users.
Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. GNU/Linuxem a Unixem obecně se zabývá již více než deset let a věnuje se především jeho nasazení v počítačových sítích a bezpečnostní politice. Zde bloguje o Root.cz, Linuxu, internetu a světě kolem sebe.
Přečteno 110 304×
Přečteno 89 109×
Přečteno 72 413×
Přečteno 57 815×
Přečteno 54 175×