Forum Linux.pl

Oprogramowanie => Inne => Wątek zaczęty przez: ESU w 2014-11-23, 18:27:00

Tytuł: Masowe zmniejszanie zdjęć...
Wiadomość wysłana przez: ESU w 2014-11-23, 18:27:00
Cześć

Przeszukuje Programu lub komendy do Masowe zmniejszanie zdjęć...

Który nie modyfikuje Metadane EXIF i Czasu Pliku....

Pozdrawiam
Tytuł: Masowe zmniejszanie zdjęć...
Wiadomość wysłana przez: płona w 2014-11-24, 10:25:31
convert z pakietu imagemagick? Nawet mam jakiegoś gotowca, co to robi. Jak potrzebujesz czegoś do wyklikania, to niestety, nie potrafię pomóc.
Tytuł: Masowe zmniejszanie zdjęć...
Wiadomość wysłana przez: Xax79 w 2014-11-24, 15:45:05
Do wyklikania możesz spróbować http://converseen.fasterland.net/

Nie wiem jak z Twoimi wymaganiani odnośnie niemodyfikowania tego i owego, to możesz sam przetestować.
Tytuł: Masowe zmniejszanie zdjęć...
Wiadomość wysłana przez: zebra w 2014-11-24, 18:55:25
phatch

Może wydawać się na początku trudny do skonfigurowania ale za to masz (chyba) pełną kontrolę nad nazwami.
Tytuł: Masowe zmniejszanie zdjęć...
Wiadomość wysłana przez: miro57 w 2014-11-24, 19:12:24
Zainstalowany ImageMagick.
man mogrify
Tytuł: Masowe zmniejszanie zdjęć...
Wiadomość wysłana przez: ESU w 2014-12-01, 18:21:27
Dzięki za podpowiedzi.... :)

Chyba każdy program modyfikuje  Czasu Pliku... :/
 
Wiec może napisać skryptem w bashu.....

Który by robił to masowo:


1. Pobierał informacje o dacie i godzinie pliku
np. "ls --full-time"

2.Masowo zmniejszało zdjęcia
np. "convert -size 1600"

3. Nadawało datę  z oryginalnego pliku
np. "touch -d 20110213"

Macie jakiś pomysł...??
Tytuł: Masowe zmniejszanie zdjęć...
Wiadomość wysłana przez: płona w 2014-12-03, 14:01:37
#!/bin/bash
# przeskalowuje obrazki hurtem. Wersja alfa.alfa.

nx=800
ny=600

DIR=`pwd`
DIR=`basename $DIR`

mkdir ../$DIR.01
if [ $? -ne 0 ]; then
    echo "Błąd mkdir"; exit
fi

for f in *
do
    size=`identify "$f" | awk '{ print $3 }'`; export size
    x=`perl -e '($x, $y) = split(/x/,$ENV{"size"}); print "$x\\n";'`
    y=`perl -e '($x, $y) = split(/x/,$ENV{"size"}); print "$y\\n";'`

    nf=../$DIR.01/"$f"
    if [ $x -gt $y ]; then
        cmd='convert '"$f"' -scale '$nx'x'$ny' '$nf
    else
        cmd='convert '"$f"' -scale '$ny'x'$nx' '$nf
    fi
    echo $size' -> '$cmd
    eval $cmd
done

Tu masz wersję alfa. Jak potrzebujesz odtworzyć datę modyfikacji pliku, to w pętli trzeba gdzieś wpisać touch -r $f $nf, ale zastanów się, czy na prawdę tego potrzebujesz? Datę zdjęcia chyba lepiej odczytać z exifa (identify z pakietu ImageMagic to robi)
Tytuł: Masowe zmniejszanie zdjęć...
Wiadomość wysłana przez: ESU w 2014-12-04, 09:55:18
Dzięki .... :)

Jak na wersje alfa.alfa to działa świetnie.... :D

Proszę cie jeszcze o kilka udogodnień...

1.  Aby skrypt pomijał plik ze skryptem.

2. Możliwość ustawienia Jakość obrazu przy przeskalowywaniu.

3. Ustawianie rozmiaru 2 automatycznie z proporcji obrazu ...
Tytuł: Masowe zmniejszanie zdjęć...
Wiadomość wysłana przez: Robert w 2014-12-04, 15:44:31
To już zakrawa na płatne zlecenie...
Tytuł: Masowe zmniejszanie zdjęć...
Wiadomość wysłana przez: płona w 2014-12-04, 22:20:08
To już zakrawa na płatne zlecenie...
roca chyba ma rację..., ale niech ci będzie:
1. skrypt umieść "gdzie indziej"; np w katalogu $HOME/bin lub w /usr/local/bin
2. przeskalowanie grafiki rastrowej zawsze wiąże się ze zmianą jakości obrazka. Jeśli po drodze chcesz zmniejszyć rozdzielczość, to polecam man convert.
3.Nie do końca rozumiem o co chodzi. Skrypt "rozpoznaje", czy obrazek jest typu portret, czy typu pejzaż i w zależności od tego odpowiednio go przeskalowuje
Tytuł: Masowe zmniejszanie zdjęć...
Wiadomość wysłana przez: ESU w 2015-01-04, 16:59:54
Udoskonaliłem skrypt przez dodanie możliwość ustawienia Jakość obrazu :P

!/bin/bash
# przeskalowuje obrazki hurtem. Wersja alfa.alfa.

#Rozdzielczosc Obrazu
nx=800
ny=600
#Jakosc Obrazu
xx=100

DIR=`pwd`
DIR=`basename $DIR`

mkdir ../$DIR.01
if [ $? -ne 0 ]; then
echo "Błąd mkdir"; exit
fi


for f in *
do

size=`identify "$f" | awk '{ print $3 }'`; export size
x=`perl -e '($x, $y) = split(/x/,$ENV{"size"}); print "$x\\n";'`
y=`perl -e '($x, $y) = split(/x/,$ENV{"size"}); print "$y\\n";'`


nf=../$DIR.01/"$f"
if [ $x -gt $y ]; then
cmd='convert '"$f"' -quality '$xx' -scale '$nx'x'$ny' '$nf
else
cmd='convert '"$f"' -quality '$xx' -scale '$ny'x'$nx' '$nf
fi
echo $size' -> '$cmd
eval $cmd
touch -r $f $nf

done
Dzięki za Pomoc.... :)

Proszę pomoc w napisaniu jeszcze jednego skryptu (oczywiście mogę za niego zapłacić)

Podobnego do tego aby masowo modyfikował Czasu Pliku odczytując go z exifa....


1. Pobierał informacje o dacie i godzinie pliku
np. identify -verbose * | grep "exif:DateTime:"

2. Nadawało datę z exifa
np. "touch -d 20110213
Tytuł: Masowe zmniejszanie zdjęć...
Wiadomość wysłana przez: płona w 2015-01-06, 11:09:14
Wieczorem Ci coś skrobnę, ale może spróbuj sam? Cały problem sprowadza się do przeformatowania czasu jaki podaje identify na format akceptowany przez touch.
Najprościej to zrobić przy pomocy perla lub awk.
Tytuł: Masowe zmniejszanie zdjęć...
Wiadomość wysłana przez: ultr w 2015-01-06, 16:07:29
Można też w samym Bashu dopasować czas z "identify" do wyrażenia regularnego i użyć dopasowań do przekształcenia na czas dla "touch":

    exif:DateTime: 2011:10:03 15:41:29
regexp='DateTime: ([0-9]+):([0-9]+):([0-9]+) ([0-9:]+)'
if [[ "$output" =~ $regexp ]]; then
  yyyy="${BASH_REMATCH[1]}"
  mm="${BASH_REMATCH[2]}"
  dd="${BASH_REMATCH[3]}"
  time="${BASH_REMATCH[4]}"
  ...
fi
Tytuł: Masowe zmniejszanie zdjęć...
Wiadomość wysłana przez: płona w 2015-01-06, 16:54:00
Wstyd się przyznać, ale po prawie 20 latach pracy na systemach *X regexpr opanowałem w stopniu zaledwie "przedszkolnym". Najlepiej byłoby się dać wykazać autorowi posta, ale słowo się rzekło, kobyłka u płota.
Zabieram się do roboty i dzięki za wskazówki.