Nowe posty

Autor Wątek: Masowe zmniejszanie zdjęć...  (Przeczytany 6390 razy)

ESU

  • Gość
Masowe zmniejszanie zdjęć...
« dnia: 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

płona

  • Gość
Masowe zmniejszanie zdjęć...
« Odpowiedź #1 dnia: 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.

Xax79

  • Gość
Masowe zmniejszanie zdjęć...
« Odpowiedź #2 dnia: 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ć.

zebra

  • Gość
Masowe zmniejszanie zdjęć...
« Odpowiedź #3 dnia: 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.

miro57

  • Gość
Masowe zmniejszanie zdjęć...
« Odpowiedź #4 dnia: 2014-11-24, 19:12:24 »
Zainstalowany ImageMagick.
man mogrify

ESU

  • Gość
Masowe zmniejszanie zdjęć...
« Odpowiedź #5 dnia: 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ł...??

płona

  • Gość
Masowe zmniejszanie zdjęć...
« Odpowiedź #6 dnia: 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)

ESU

  • Gość
Masowe zmniejszanie zdjęć...
« Odpowiedź #7 dnia: 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 ...

Offline Robert

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2516
    • Zobacz profil
Masowe zmniejszanie zdjęć...
« Odpowiedź #8 dnia: 2014-12-04, 15:44:31 »
To już zakrawa na płatne zlecenie...
Zanim popełnisz grafomaństwo: 1 | 2 | 3
Baza RPM Jak szukać informacji

płona

  • Gość
Masowe zmniejszanie zdjęć...
« Odpowiedź #9 dnia: 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

ESU

  • Gość
Masowe zmniejszanie zdjęć...
« Odpowiedź #10 dnia: 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

płona

  • Gość
Masowe zmniejszanie zdjęć...
« Odpowiedź #11 dnia: 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.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Masowe zmniejszanie zdjęć...
« Odpowiedź #12 dnia: 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

płona

  • Gość
Masowe zmniejszanie zdjęć...
« Odpowiedź #13 dnia: 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.