nummer80
Goto Top

Dateigröße von Bildern per Batch anpassen?

Hallo Zusammen,

ich habe bereits ein Batch das per "convert" Bildergößen (viele Bilder) ändert ( convert -resize 100x100.. usw.).
Nun habe ich aber noch die zusätzliche Anforderung bekommen, dass alle Bilder maximal ( z.B.) 50KB groß sein dürfen.
Ist solch eine Dateigrößenanpassung irgendwie (per Batch / Imagemagick) lösbar?
Ich habe leider nichts dazu gefunden.

Wäre für einen Tipp sehr dankbar.

Viele Grüße,
nummer80

Content-ID: 161230

Url: https://administrator.de/contentid/161230

Ausgedruckt am: 05.11.2024 um 14:11 Uhr

mustangdriver
mustangdriver 21.02.2011 um 15:52:36 Uhr
Goto Top
Verwende doch den Microsoft Office Picture Manage.
Dort gehst du auf die Ansicht Miniaturansicht, markierst mit STRG-A alle Bilder und dann auf "Bilder bearbeiten/Größe ändern" hier kannst dann sagen, was du für ein Maximalformat haben willst oder um wieviel % es verkleinert werden soll.
bastla
bastla 21.02.2011 um 16:35:43 Uhr
Goto Top
Hallo nummer80!

Du kannst zwar per Batch die Dateigröße feststellen - zB mit
for /f "delims=" %%i in ('dir /b /a-d "D:\Dein Bilderordner\klein\*.jpg"') do if %%~zi gtr 51200 echo Zu verkleinern: %%i (derzeit: %%~zi Bytes)
- wie Du die Bilder aber schlanker bekommst (zB stärkere jpg-Kompression), müsstest Du Dir selbst überlegen ...

Grüße
bastla
TraceHard40
TraceHard40 21.02.2011 um 16:36:15 Uhr
Goto Top
Hallo,

ich benutze dazu IrfanView.

Grüße,
TH40
bastla
bastla 21.02.2011 um 16:44:14 Uhr
Goto Top
Hallo TH40!

Kannst Du kurz beschreiben, wie Du damit automatisiert die Dateigröße auf max 50 KB bekommst?

Grüße
bastla
pieh-ejdsch
pieh-ejdsch 21.02.2011 um 17:29:18 Uhr
Goto Top
moin,

ein tool was auch per Batch bedienbar ist:
http://www.imageresizer.com/

Gruß Phil
TraceHard40
TraceHard40 21.02.2011 um 17:29:43 Uhr
Goto Top
Zitat von @bastla:
Hallo TH40!

Kannst Du kurz beschreiben, wie Du damit automatisiert die Dateigröße auf max 50 KB bekommst?

Grüße
bastla

Servus,

ja kein Problem:

1. Zunächst benötigt man dazu IrfanView: http://www.irfanview.de/
2. Dann benötigt man noch das RIOT-Plugin: http://download.criosweb.ro/download.php?sid=R-dll
3. Die riot.dll gehört in den Irfan-View Plugin-Order, die FreeImage.dll in das root-Verzeichnis vom Irfan-View.

4. Im Programm - File -> Batch Conversion/Rename ->

5. Dort kann man unter Options die gewünschten Werte eintragen.
6. Dann noch per Add oder Add all die Files einbinden und auf "Start Batch" gehen.
7. Fertig

Viele Grüße,
TH40
nummer80
nummer80 22.02.2011 um 11:46:47 Uhr
Goto Top
Hallo,

also vielen Dank erstmal für die schnellen Antworten !!!
Ich werde das mal mit IrfanView versuchen.
Kann ich das auch per Komandozeile (Batch Datei) ansprechen (also nicht per Klick im Programm selbst die Bilder adden und dort die KB-Größe einstellen)??
Speziell diese Zeile resp.die Einstellung dazu versuche ich zusammenzubekommen, scheitere aber leider etwas in der Hilfeoption...
Vielleicht hat jemand von Euch damit schon seine Erfahrung gemacht und könnte mir weiterhelfen?!

Vielen Dank im voraus!
nummer80
pieh-ejdsch
pieh-ejdsch 22.02.2011 um 12:13:32 Uhr
Goto Top
moin nummer80,

die meisten PictureProgramme können zwar eine Batchverarbeitung aber keine KommandoZeile.

als Alternative könnstest Du "Boxwech" benutzen. Das konfigurierst Du auf den Namen der Batchdatei und Klickst dann Die ganzen schritte Durch in Irfanview.
Einmal eingerichtet erledigt Boxwech diese ganze Klickabfolge Superschnell. Ungefähr nach dem Prinzip eines Makros.

Gruß Phil
nummer80
nummer80 22.02.2011 um 12:45:22 Uhr
Goto Top
Hi Phil,

danke für den Tipp,
ich bin mittlerweile soweit, dass ich per Kommandozeile (.bat-Datei) das Programm aufrufe
(diese Datei liegt dazu i.M. unter C:\Programme\IrfanView)
und auch die Einstellungen, die ich im Programm vorher gemacht habe (per Klick, nämlich max.50KB) verarbeitet werden.

Der Inhalt der Datei:

i_view32.exe "c:\test\*.jpg" /advancedbatch /convert="c:\test\neu\*.jpg"

Ich dachte zwar, dass ich die Einstellungen mit in diese Zeile schreiben kann
(das wäre mir bedeutend lieber, da man sonst diese Einstellungen im Programm nie ändern darf bzw. nur eine KB-Größe herausbekommt),
aber so funktioniert es -zumindest in einem ersten Test.
Bei einem zweiten Test mit ein paar Bildern mehr, hat es mir allerdings ein Bild nicht verarbeitet, aber das kann auch am Bild selbst liegen...

Vielleicht hat aber trotzdem noch jemand eine Idee bzgl. des Aufrufs, bzw. der mitzugebenden Argumente bzgl. der KB Zahl?!

Danke und Gruß,
nummer80
bastla
bastla 22.02.2011 um 12:50:00 Uhr
Goto Top
Hallo nummer80!

Quick & dirty face-wink: Da die Einstellungen ja in einer Datei (ev ".ini", habe gerade kein "IrfanView" zur Hand) gespeichert sein dürften, könntest Du mehrere Versionen dieser Datei (für unterschiedliche KB-Werte) erstellen und vorweg die richtige Version über die "Standard-Datei" kopieren ...

Grüße
bastla
messebe
messebe 23.02.2011 um 00:08:08 Uhr
Goto Top
MoinMoin,
ich habe das ganze so gelöst :

c:\programme\irfanview\i_view32.exe d:\irfan_input\*.jpg /resize=(100,0) /aspectratio /convert=d:\irfan_pics_for_the_web\*.jpg

Alle Bilder haben eine Seitenlänge von 800 Pixel und werden größenmäßig angepasst, Größe ist dann so bei 100 -130 Kb
nummer80
nummer80 23.02.2011 um 14:23:07 Uhr
Goto Top
Hallo Zuammen,

vielen Dank noch für Eure zwei Beiträge.
Ich bin leider noch nicht dazu gekommen, mich mit der Quick&Dirty Lösung zu beschäftigen
und die Lösung von messebe ist leider nicht genau das auf was ich hinaus sollte,
denn ich habe eine vorgegebene Größenbeschränkung (also eine maximale KB Zahl pro Bild (50KB)) die nicht überschritten werden darf...
messebe
messebe 23.02.2011 um 19:12:44 Uhr
Goto Top
MoinMoin

so, ich denke jetzt sollte es passen.
1. Plugin iv_formats installieren download von : www.irfanview.com/plugins.htm
2. in Irfanview unter Datei Batch / Stapel Konvertierung die Optionen einstellen
Unter Zielformat ist dann die Größe versteckt, dort auf 100 KB setzen und speichern
3. In der CommanLine den Parameter /advancedbatch angeben

c:\programme\irfanview\i_view32.exe d:\irfan_input\*.jpg /resize=(100,0) /aspectratio /advancedbatch /convert=d:\irfan_pics_for_the_web\*.jpg


Hoffe Dir ist damit geholfen
pieh-ejdsch
pieh-ejdsch 26.02.2011 um 02:09:40 Uhr
Goto Top
moin,

ich hab mal etwas zusammengeschruppt wobei man die Auflösung die Qualität und die Dateigröße den Anforderungen entsprechend einstellen kann.

Batch Bilder größen
:: schnipp----- ResizePics.cmd ----
@echo off&setlocal

set "iPath=%ProgramFiles%\IrfanView\i_view32.exe"  

set "CurrentPictPath=E:\Pics\"  

set "CurrentPict=*.jpg"  

:: Darf nicht im Selben Verzeichnis sein wie die Quelle
set "ResizedPath=E:\ResPics\"  


:: Maximale Auflösung einstellen
:: "ResDimMax="    -> Keine Obere Auflösungsgrenze 
:: "ResDimMax=50"  -> Gibt den Wert der Größten möglichen Auflösung an 

set "ResDimMax=800"  

:: Minimale Auflösung einstellen 
:: "ResDimMin=" -> Qualitäts einstellung hat Vorrang 
:: "ResDimMin=0"   -> Qualitäts Einstellung Bleibt 100% 
:: "ResDim=50"  -> Qualität wird ab dieser Auflösung Heruntergesetzt 

set "ResDimMin=800"  


:: Einheit der Dateigröße (B, KB, MB)
set "SizBits=KB"  

:: Maximale Dateigröße einstellen 
set "ResSizMax=50"  

:: Minimale Dateigröße einstellen (in KB)
:: sollte wenigstens 500 bytes kleiner als ResSizMax sein (wird automatisch ausgerechnet wenn gleich)

set "ResSizMin=50"  

:: Minimale mögliche Bildqualität einstellen (Minimal 25 empfohlen)

set "ResQuaMin=30"  



:: Ende Einstellungen
::
set "CurrentPicDat=%Temp%\CPictdat"  
if /i "%SizBits%" == "B"  set /a SizBits = 1  
if /i "%SizBits%" == "KB" set /a SizBits = 1024  
if /i "%SizBits%" == "MB" set /a SizBits = 1048576  

if defined ResSizMax set /a ResSMax = ResSizMax * SizBits
if defined ResSizMin set /a ResSMin = ResSizMin * SizBits
if defined ResSizMin if "%ResSMin%" geq "%ResSMax%" set /a ResSMin - = 500  
for %%i in ("%CurrentPictPath%%CurrentPict%") do echo Bearbeite "%ResizedPath%%%~nxi"&set "CurrentPict=%%~nxi"&set "CurPict=%%~i"& call :dimensons  

pause
goto :eof

:dimensons
set "LongSize=0"  
"%iPath%" "%CurPict%" /info="%CurrentPicDat%"  
if not "%OS%" == "!OS!" setlocal enabledelayedexpansion  
for /f "tokens=4,6" %%j in ('findstr /b /c:"Image dimensions =" "%CurrentPicDat%"') do (  
	for %%l in (%%j %%k) do (
		if !LongSize! lss %%l set "LongSize=%%l"  
)	)
for %%i in ("%CurPict%") do set /a PictSize = %%~zi  
if not defined ResDimOld if not defined ResDimOld (set "ResDimOld=%ResDimMax%") else set "ResDimOld=%LongSize%"  
if not defined ResQua (set "AQuali=100") else set "AQuali=%ResQua%"  
if defined Test goto :SizeMax
:DimMax
if not defined ResDimMax goto :DimMin
if %ResDimMax% leq %LongSize% (set "Resolution=/resize=(%ResDimMax%,%ResDimMax%)"&goto :Quali)  
:DimMin
if not defined ResDimMin goto :Quali
if %ResDimMin% geq %LongSize% (set "Resolution=/resize=(%ResDimMin%,%ResDimMin%)")  
:Quali
if defined ResQua set "Qualit=/jpgq=%ResQua%"  
if not defined Test goto :Picture
:SizeMax
if not defined ResSizMax goto :SizeMin
if %ResSMax% leq %PictSize% goto :Kleiner
if not defined ResSizMin echo %LongSize%x, %AQuali%%%, %PictSize% byte&echo.&endlocal&goto :eof
:SizeMin
if not defined ResSizMin goto :Picture
if %ResSMin% geq %PictSize% goto :groesser
echo %LongSize%x, %AQuali%%%, %PictSize% byte&echo.&endlocal&goto :eof
:Picture
"%iPath%" "%CurrentPictPath%%CurrentPict%" %Qualit% %Resolution% /aspectratio /resample /convert="%ResizedPath%%CurrentPict%"  
if defined Test if not defined ResSizMax (echo %LongSize%x, %AQuali%%%, %PictSize% byte&echo.&endlocal&goto :eof)
set "CurPict=%ResizedPath%%CurrentPict%"  
set "Test=1"&goto :dimensons  
:kleiner
if not defined Test goto :SizeMin
if defined ResDimMax (
	set /a "ResDim= ResDimMax - ( ResDimMax / 20 )"  
) else set /a "ResDim= LongSize - ( LongSize / 20 )"  
if defined ResDimMin (
	if !ResDimMin! leq %ResDim% (
		set "ResDimMax=%ResDim%"  
	) else if not !ResDimMin! == %LongSize% (
		set "ResDimMax=%ResDimMin%"  
	) else (
		if not defined ResQua (
			set "ResQua=95"  
		) else set /a ResQua - = 5
	)
) else (
	if not defined ResQua (
		set "ResQua=95"  
	) else set /a ResQua - = 5
)
if defined ResQua (
	if defined ResQuaMin (
		if !ResQuaMin! leq %ResQua% (set "ResQua=%ResQua%") else echo Quali minimum erreicht&echo %LongSize%x, %AQuali%%%, %PictSize% byte&echo.&goto :eof  
	) else set "ResQua=%ResQua%"  
)
set "Test=" & goto :DimMax  
:groesser
if not defined Test goto :Picture
if defined ResDimMax (
	set /a "ResDim= ResDimMax + ( ResDimMax / 25 )"  
) else set /a "ResDim= LongSize + ( LongSize / 30 )"  

if %ResDimOld% geq %ResDim% (
	set "ResDimMax=%ResDim%"  
	set "LongSize=%ResDim%"  
	set "ResQua="  
) else (if defined ResQua (
		set "ResQua="  
		) else echo Maximum Dimension erreicht&echo %LongSize%x, %AQuali%%%, %PictSize% byte&echo.&goto :eof
	)
)
set "Test=" & goto :DimMax  
:: schnapp----- ResizePics.cmd ----

Gruß Phil
nummer80
nummer80 01.03.2011 um 10:32:28 Uhr
Goto Top
Hallo Zusammen,

bin die Tage nicht dazu gekommen reinzuschauen, aber da ich es ja schon fast habe
und ihr Euch jetzt auch nochmal die Mühe gemacht habt das so auszuführen,
wollte ich mich nochmal bei Euch bedanken und schließe das Thema damit!

Merci

Gruß,
nummer80