GD durch Image Magick ersetzen, aber wie?

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Antworten
Sonnenblume
Beiträge: 53
Registriert: Mi 28.Feb, 2007 23:12

GD durch Image Magick ersetzen, aber wie?

Beitrag von Sonnenblume »

Hallo alle zusammen,

ich setze das Album von Smartor ein und möchte zur besseren Thumbnail-Erstellung gerne ImageMagick anstatt GD einsetzen.
Dazu habe ich in der album_thumbail.php die Codezeilen:

Code: Alles auswählen

	if (!$src)
	{
		$gd_errored = TRUE;
		$pic_thumbnail = '';
	}
	else if( ($pic_width > $album_config['thumbnail_size']) or ($pic_height > $album_config['thumbnail_size']) )
	{
		// ----------------------------
		// Resize it
		// ----------------------------

		if ($pic_width > $pic_height)
		{
			$thumbnail_width = $album_config['thumbnail_size'];
			$thumbnail_height = $album_config['thumbnail_size'] * ($pic_height/$pic_width);
		}
		else
		{
			$thumbnail_height = $album_config['thumbnail_size'];
			$thumbnail_width = $album_config['thumbnail_size'] * ($pic_width/$pic_height);
		}

		$thumbnail = ($album_config['gd_version'] == 1) ? @imagecreate($thumbnail_width, $thumbnail_height) : @imagecreatetruecolor($thumbnail_width, $thumbnail_height);

		$resize_function = ($album_config['gd_version'] == 1) ? 'imagecopyresized' : 'imagecopyresampled';

		@$resize_function($thumbnail, $src, 0, 0, 0, 0, $thumbnail_width, $thumbnail_height, $pic_width, $pic_height);
	}
	else
	{
		$thumbnail = $src;
	}

	if (!$gd_errored)
	{
		if ($album_config['thumbnail_cache'] == 1)
		{
			// ------------------------
			// Re-generate successfully. Write it to disk!
			// ------------------------

			$pic_thumbnail = $pic_filename;

			switch ($pic_filetype)
			{
				case '.jpg':
					@imagejpeg($thumbnail, ALBUM_CACHE_PATH . $pic_thumbnail, $album_config['thumbnail_quality']);
					break;
				case '.png':
					@imagepng($thumbnail, ALBUM_CACHE_PATH . $pic_thumbnail);
					break;
			}

			@chmod(ALBUM_CACHE_PATH . $pic_thumbnail, 0777);
		}


		// ----------------------------
		// After write to disk, donot forget to send to browser also
		// ----------------------------

		switch ($pic_filetype)
		{
			case '.jpg':
				@imagejpeg($thumbnail, '', $album_config['thumbnail_quality']);
				break;
			case '.png':
				@imagepng($thumbnail);
				break;
		}

		exit;
	}
	else
	{
		// ----------------------------
		// It seems you have not GD installed :(
		// ----------------------------

		header('Content-type: image/jpeg');
		readfile('images/nothumbnail.jpg');
		exit;
	}
}
folgendermaßen geändert:

Code: Alles auswählen

	if (!$src)
	{
		$gd_errored = TRUE;
		$pic_thumbnail = '';
	}
	else if( ($pic_width > $album_config['thumbnail_size']) or ($pic_height > $album_config['thumbnail_size']) )
	{
		// ----------------------------
		// Resize it
		// ----------------------------

		if ($pic_width > $pic_height)
		{
			$thumbnail_width = $album_config['thumbnail_size'];
			$thumbnail_height = $album_config['thumbnail_size'] * ($pic_height/$pic_width);
		}
		else
		{
			$thumbnail_height = $album_config['thumbnail_size'];
			$thumbnail_width = $album_config['thumbnail_size'] * ($pic_width/$pic_height);
		}

		       	copy ( $src, $thumbnail );
        		@chmod ($outthumb, 0666);
			$syscmd = "'/usr/bin/mogrify' -resize $thumbnail_width x $thumbnail_height -sharpen 0.5 -quality 90 $thumbnail ";
		
	}
	else
	{
		$thumbnail = $src;
	}

	if (!$gd_errored)
	{
		if ($album_config['thumbnail_cache'] == 1)
		{
			// ------------------------
			// Re-generate successfully. Write it to disk!
			// ------------------------

			$pic_thumbnail = $pic_filename;

			switch ($pic_filetype)
			{
				case '.jpg':
					@imagejpeg($thumbnail, ALBUM_CACHE_PATH . $pic_thumbnail, $album_config['thumbnail_quality']);
					break;
				case '.png':
					@imagepng($thumbnail, ALBUM_CACHE_PATH . $pic_thumbnail);
					break;
			}

			@chmod(ALBUM_CACHE_PATH . $pic_thumbnail, 0777);
		}


		// ----------------------------
		// After write to disk, donot forget to send to browser also
		// ----------------------------

		switch ($pic_filetype)
		{
			case '.jpg':
				@imagejpeg($thumbnail, '', $album_config['thumbnail_quality']);
				break;
			case '.png':
				@imagepng($thumbnail);
				break;
		}

		exit;
	}
	else
	{
		// ----------------------------
		// It seems you have not GD installed :(
		// ----------------------------

		header('Content-type: image/jpeg');
		readfile('images/nothumbnail.jpg');
		exit;
	}
}
Leider wird nun kein Thumbnail mehr angezeigt. :(
Der Pfad ist laut Auskunft meines Providers aber korrekt.
Was habe ich falsch gemacht?

Gruß

Sonnenblume
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

/usr/bin/mogrify
Der Pfad mag in Ordnung sein, aber kommt PHP auch dorthin?
Wohl eher nicht, daher ist der Zugriff auf diese Weise nicht möglich.

Aber das wäre zunächst Nebensache.

In Deiner Änderung erstellst Du den Befehl für Image Magick, aber wo ist der Aufruf dazu?
Also erstellen lässt Du

Code: Alles auswählen

$syscmd = "'/usr/bin/mogrify' -resize $thumbnail_width x $thumbnail_height -sharpen 0.5 -quality 90 $thumbnail "; 
Und was passiert mit $syscmd?
Ich sehe hier z. B. kein passthru($syscmd), um den Befehl über PHP auf der Shell des Servers auszuführen, damit Image Magick überhaupt arbeiten kann...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Sonnenblume
Beiträge: 53
Registriert: Mi 28.Feb, 2007 23:12

Beitrag von Sonnenblume »

Vielen Dank.
Passthru reicht leider nicht aus. :(
Hast Du eine Idee, was ich noch alles umschreiben, hinzufügen muss?

Schon mal vielen Dank für Deine Hilfe.

Gruß

Sonnenblume

PS.: Hier noch mal die ursprüngliche Version vom Pimp my Album:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Sonnenblume am Do 19.Mär, 2009 19:59, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Passthru ist der Befehl in PHP, Shell-Befehle auszuführen.
Vielleicht hat aber genau das Dein Hoster unterbunden.
Dann solltest Du bei GD bleiben, soooo viel schlechter ist das ja auch nicht.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Sonnenblume
Beiträge: 53
Registriert: Mi 28.Feb, 2007 23:12

Beitrag von Sonnenblume »

Frag ich gleich mal nach.
GD kann leider nicht mit ICM und EXIFs umgehen und löscht daher beides aus den Fotos heraus. :(

Gruß

Sonnenblume
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

GD kann leider nicht mit ICM und EXIFs umgehen und löscht daher beides aus den Fotos heraus.
Das ist wohl wahr, allerdings dann auch nur aus dem Thumbs. In den Original-Bildern bleiben die Daten erhalten.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Sonnenblume
Beiträge: 53
Registriert: Mi 28.Feb, 2007 23:12

Beitrag von Sonnenblume »

Passthru funktioniert wohl nicht. Ich soll entweder mittels AddHandler die gesperrten System-Befehle freischalten oder exec verwenden.
Hast Du evtl. noch eine Idee oder soll ich es lassen und bei GD bleiben?
Die veränderten Farben im Browser stören mich allerdings schon.

Danke & Gruß

Sonnenblume
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ich würde bei den Problemem bei GD bleiben.
Allerdings kannst Du im Album die GD-Version wählen. Also GD 1 oder GD 2.
Musst wohl bei Dir umschalten, dann sind die Farben wieder okay.
Nur vorher allerdings dann auch denAlbum Cache leeren, damit die falsch erstellten Thumbnails gelöscht werden.
Die baut das Album dann ja auch wieder automatisch neu auf.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Sonnenblume
Beiträge: 53
Registriert: Mi 28.Feb, 2007 23:12

Beitrag von Sonnenblume »

An GD1 oder GD2 liegt es nicht. GD kann kein ICM und daher werden die Farben bei einem Browser mit Farbmanagement nicht korrekt angezeigt. :-(
Ich werde am WE noch mal einen Versuch starten.

Gruß

Sonnenblume
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Meinst Du mit ICM ein Bildformat wie JPEG oder GIF?
Das kann GD klar nicht und sollte eigentlich auch im Album erst gar nicht möglich sein...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Sonnenblume
Beiträge: 53
Registriert: Mi 28.Feb, 2007 23:12

Beitrag von Sonnenblume »

In den JPGs ist z.B. AdobeRGB anstatt sRGB als Farbprofil (ICM) enthalten.
Da GD im Gegensatz zu ImageMagick die Farbprofile beim Verkleinern löscht, werden die Fotos nur noch im sRGB-Profil angezeigt.
Daher u.a. mein Wunsch GD durch ImageMagick zu ersetzen.

Gruß

Sonnenblume
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Nun ja, wenn aber auch das nicht geht...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Sonnenblume
Beiträge: 53
Registriert: Mi 28.Feb, 2007 23:12

Beitrag von Sonnenblume »

Nur weil wir hier noch keine Lösung gefunden haben, heißt es doch noch lange nicht, dass es nicht funktioniert.
Ich schau jetzt noch mal bei ImageMagick ins Forum. Vielleicht finde ich dort eine Lösung.

Ich danke Dir für Deine Hinweise.

Gruß

Sonnenblume
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Nur weil wir hier noch keine Lösung gefunden haben, heißt es doch noch lange nicht, dass es nicht funktioniert.
Das habe ich ja auch nicht behauptet, aber es ist eben scheinbar bei Dir so oder so nicht oder wohl nur mit Hilfe des Providers möglich. Und der scheint ja auch nicht wirklich zu helfen oder zu wollen...
Ich schau jetzt noch mal bei ImageMagick ins Forum. Vielleicht finde ich dort eine Lösung.
Viel Glück dabei.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten