Portál AbcLinuxu, 24. dubna 2024 12:56


Dotaz: imagemagick konverze raw (CR2) do tiff, ztráta exif

30.8.2013 11:04 T0m!k | skóre: 2
imagemagick konverze raw (CR2) do tiff, ztráta exif
Přečteno: 520×
Odpovědět | Admin
Potřeboval bych poradit. Příkaz convert _MG_0489.CR2 out.tiff ztrácí všechna exif data, ale s převodem cr2 na jpg problémy nesjou, jenže potřebuju tiff protože je bezztrátový a má 16bit/kanál. Na jiném foru řešili něco podobného ale nevyřešili, tady
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

31.8.2013 15:45 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: imagemagick konverze raw (CR2) do tiff, ztráta exif
Odpovědět | | Sbalit | Link | Blokovat | Admin

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. :)

pepe_ avatar 31.8.2013 17:36 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: imagemagick konverze raw (CR2) do tiff, ztráta exif

Každý nění scriptař , tak co třeba sample ?

pepe_ avatar 1.9.2013 23:02 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: imagemagick konverze raw (CR2) do tiff, ztráta exif

convert pagoda_sm.jpg -compress zip -quality 95 pagoda_sm.tif
exiftool -tagsFromFile pagoda_sm.jpg -All:All --IFD1:All pagoda_sm.tif

2.9.2013 21:11 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: imagemagick konverze raw (CR2) do tiff, ztráta exif

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.

1.9.2013 14:52 Radun
Rozbalit Rozbalit vše Re: imagemagick konverze raw (CR2) do tiff, ztráta exif
Odpovědět | | Sbalit | Link | Blokovat | Admin
není to náhodou tím, že tiff nemá exif jako jpg, ale své atributy. Chvilku jsem hledal a naše jsem řešení podobného problému -- převod z jpg do tiff. Možná to pomůže,tady je odkaz
5.9.2013 20:44 T0m!k | skóre: 2
Rozbalit Rozbalit vše Re: imagemagick konverze raw (CR2) do tiff, ztráta exif
Našel jsem ještě lepší, přes dcraw, vytvořil jsem batch script ale chtěl bych jej upravit:
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
5.9.2013 21:39 T0m!k | skóre: 2
Rozbalit Rozbalit vše Re: imagemagick konverze raw (CR2) do tiff, ztráta exif
Ještě musím dodat že jsem musel přidat k dcraw parametry -W -w, aby se nezvyšoval jas a nastevení bíle bylo dle fotoaparatu. I přesto je výsledek trochu jiný než je z programu convert. U dcraw je více šumu a kontrast je menší, to se mi na astrofoto hodí lépe ten convert. Jak mám tedy nastavit ten dcraw aby byly jeho vizualní výsledky více podobné jako v imagemagick convert?
6.9.2013 09:08 Radun
Rozbalit Rozbalit vše Re: imagemagick konverze raw (CR2) do tiff, ztráta exif
Tady nemohu sloužit, dcraw vůbec neznám: můj foťák generuje jen jpeg.
6.9.2013 09:06 Radun
Rozbalit Rozbalit vše Re: imagemagick konverze raw (CR2) do tiff, ztráta exif
stačí použít místo $file.tiff toto

${file%.*}.tiff

${file%.*} odsekne z původního názvu příponu (vše od konce po první tečku včetně)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.