Portál AbcLinuxu, 6. května 2025 06:02
Riesenim tvojho problemu by som to nenazval, ale vzhladom na nenarocnost operacie (cas, vykon), to az tak zle nebude.
Moj navrh spociva v tom, ze prv si exif data ulozit do suboru, nasledne prekonvertovat raw do tiff a nahrat exif do toho tiff, ak si convert samotny teda nevie poradit. Balicek exiv2 funguje fajn, co sa tyka exportu a importu exif dat. A jednoduchym skriptom to pojde ako po masle.
PNG podporuje aj 16bit na kanal, ale aka je podpora vo vseobecnosti, to nemam paru. :)
Každý nění scriptař , tak co třeba sample ?
convert pagoda_sm.jpg -compress zip -quality 95 pagoda_sm.tif
exiftool -tagsFromFile pagoda_sm.jpg -All:All --IFD1:All pagoda_sm.tif
Pepe, suhlas. Ale musim poznamenat, ze som mu dal navrh riesenia a premyslal som, ci mu tam daco napisem alebo nie. Rozhodol som sa pre nie, bo az by eventualne chcel daco, tak som tu a rad pomozem. Takze to neboli len dristy, ako to spravit, ja som tu bol pripraveny mu s tym pomoct, pokial to bude v mojich moznostiach.
Tuna je moje riesenie:
#! /bin/bash # deklaracia globalnych premennych declare -a array_dirs array_pics # uprav pre svoje potreby, ak potrebujes, co sa tyka volieb pre mogrify # $1 - vystupny format obrazkov # $2 - vystupna cesta, kam sa vysledok ulozi ( !!! mogrify sa nestara a prepise akykolvek subor ak sa zhoduju v nazve narozdiel od convert a preto to treba # mat na zreteli !!! ) # $3 - vstup; obrazky alebo zoznam obrazkov pre konverziu Mogrify(){ mogrify -format "$1" -path "$2" "$3" } Help(){ cat <<_EOF Vyuzitie: Extrahuje exif data do suboru zo zdrojoveho obrazku pred konvertom formatov obrazkov a po ukonceni ho nacita do uz prekonvertovaneho obrazku. P.S.: Si to potreboval, ked convert stracal exif data pri konvertovani CR2 do tiff . :) Volby: -h, --help : pomoc -r, --recursive : rekurzivne hladanie; ak nasleduje za touto volbou cislo, je brane ako uroven hlbky hladania -i, --iextension : zdrojovy format obrazkov; ak adresar obsahuje viacero roznych formatov a my chceme len ten dany jeden -o, --oextension : vystupny format obrazkov; POVINNY PARAMETER -> ERROR: MAGIC BALL IS NOT IMPLEMENTED YET. STAY TUNED. -p, --path : cesta ku korenovemu adresaru hladania; POVINNY PARAMETER Akekolvek nerozpoznane volby su brane ako obrazky samotne. ${0} --oextension [pripona] --path [cesta_k_adresaru] _EOF } CheckApps(){ declare status=0 which mogrify &>/dev/null || { echo "Je nutne nainstalovat balicek imagemagick ."; status=1; } which exiv2 &>/dev/null || { echo "Je nutne nainstalovat balicek exiv2 ."; status=1; } # Verzia 0.23 a vyssie je nutna pre citanie a zapis CR2 formatu obrazkov, resp. ich exif dat. version="$(exiv2 -V | head -n1 )" version="${version#* }" version="${version%% *}" if [[ ${version%%.*} -gt 0 ]] then : else if [[ ${version##*.} -lt 23 ]] then echo -e "Je nutne updatnut balicek exiv2 na verziu 0.23 a vyssiu.\nNizsie verzie nepodporuju citanie a zapis CR2 formatu obrazkov exif dat." status=1 fi fi [[ $status -eq 1 ]] && echo "Pred dalsim spustenim skriptu doinstalujte vyssie uvedene aplikacie." && exit 1 } FindDirs() { declare dir while read dir do array_dirs+=( "$dir" ) done< <(find "$path" $maxdepth -type d ) } Convert(){ declare pic absdir for pic in "${array_pics[@]}" do if [[ "$absdir" != "${pic%/*}" ]] then absdir="${pic%/*}" newabsdir="${absdir}"/"${absdir##*/}_new" mkdir "$newabsdir" fi exiv2 extract "$pic" Mogrify "$oext" "$newabsdir" "$pic" exvfile="${pic%.*}.exv" picname="${pic##*/}" picname="${picname%.*}" mv "$exvfile" "$newabsdir" exiv2 insert "${newabsdir}"/"${picname}.${oext}" done } FindPics(){ declare absdir file newabsdir for absdir in "$@" do for file in "$absdir"/*"$iext" do identify "$file" &>/dev/null && array_pics+=( "$file" ) done done } ####################################### MAIN ############################################ CheckApps while [[ "$1" ]] do case "$1" in -r | --recursive ) recursive='true' regexp='^[0-9]+' if [[ "$2" =~ $regexp ]] then declare maxdepth="-maxdepth $2" shift 2 else # vychodzie spravanie; spracuje len subory v aktualnom adresari declare maxdepth="-maxdepth 0" shift 1 fi ;; -h | --help ) Help exit 0 ;; -i | --iextension ) # nevieme, ci uzivatel zada k pripone bodku a ci nie, takze ju prv odstranime, ak daka bola zadana # a nasledne ju pridame pred hodnotu # Ak nie je zadany vstupny format obrazku, berieme vsetky obrazky nezavisle na pripone. iext=".${2//.}" shift 2 ;; -o | --oextension ) # tato volba je nutna, potrebujeme daco podsunut pre convert oext="${2//.}" shift 2 ;; -p | --path ) path="$(readlink -f "$2" 2>/dev/null )" if [[ $? -eq 0 && -r "$path" ]] then : else # Iba jedna cesta moze byt zadana pre jeden beh skriptu, takze zadanim neexistujucej cesty alebo # nemajuc opravnenie na citanie, skript nemoze splnit vsetky poziadavky uzivatela a sa ukonci s chybou. echo -e "Nemozno spracovat zadanu cestu: $path.\nNeexistuje alebo nemam opravnenie na citanie." exit 1 fi shift 2 ;; * ) file="$(readlink -f "$1" 2>/dev/null )" if [[ $? -eq 0 && -r "$file" ]] then if identify "$file" &>/dev/null then array_pics+=( "$file" ) else echo -e "Nemozem spracovat $wannabe_pic .\nNeexistuje, nemam opravnenie na citanie alebo sa nenasiel ziaden obrazok." exit 1 fi fi shift 1 ;; esac done if [[ -z "$oext" ]] then echo -e "Zadanie vystupneho formatu obrazku je nutna volba./nZadaj argument -o [pripona] alebo volbu --help." exit 1 fi if [[ "$recursive" == true ]] then FindDirs FindPics "${array_dirs[@]}" fi if [[ "${#array_pics[@]}" -eq 0 ]] then echo "Ziadne obrazky na spracovanie./nPouzi volbu --path pre adresar alebo zadaj konkretny obrazok.\nVid $0 --help." exit 1 fi Convert
Skript som skusal na svojich fotografiach pri roznych scenaroch a fungoval. Ak sa ale vyskytne daka chyba, daj vediet a skusim to dat do poriadku. Skript je setrny na zdrojove subory a nemaze nic. Subory obsahuje exif data sa nachadzaju v podadresari povodneho adresara spolu s prekonvertovanymi obrazkami. Ak nieco nie je jasne, daj vediet, pomozem. Ak vidis daku chybu, alebo vies nieco lepsie, oprav a upovedom. Budem iba rad. Snad pomoze. Zatial.
name=$*
for file in $name
do
dcraw -c -T -6 $file | convert -quiet -compress zip - $file.tiff
echo $file converted
done
vytvoří to soubor s koncovkou .CR2.tiff
jakou upravu mám provést aby tam nebylo to cr2? např: _MG_869.tiff
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.