bildgröße

blubber

Erfahrenes Mitglied
Hi,
ich hab für mein newsscript (php) eine bildupload funktion eingebaut, mit der ich eben bilder zu den news uppen kann. Diese sind meist im jpg format, und haben eine größe von 1024x768
Für mein Newsscript änder ich die Größe des Bildes natürlich auf ca 150x100 pixel, ganz simpel halt mit width="150" height="100". Allerdings hab ich ja so das Problem, dass das große Bild nur kleiner angezeigt wird, also immernoch die volle Dateigröße hat. Nun kann man sich ja vorstellen, das bei 10 News, mit 10 Jpg Bildern und ca 100kbyte pro Bild, der User 1MB alleine schon an den News saugen darf.
Nun meine Frage. Es muss doch eine Möglichkeit geben, dass die Bilder nicht nur in ihrer LängexBreite kleiner werden, sondern auch in ihrer Dateigröße. Sprich, wenn ich ein 1024x768 jpg bild mit 200kbyte größe auf eine effektive anzeigegröße von 150x100 schrumpfe, auch die 200kbyte schrumpfen. Beispiel: http://www.turtled.com
Die werden doch net vor jedem Newspost von Hand die Bildgröße ändern, nur um eine geringe Dateigröße zu erreichen !?

Hoffe mein Problem wurde verstanden ;)
 
Weil ich grade nichts zu tun hatte und ich zur Zeit alles in Klassen kapsle, hab ich dir mal eine Thumb-Klasse geschrieben, die dir bei deinem Problem helfen sollte :)

PHP:
<?
// Inhalt: Klasse zum Erstellen von Thumbnails
// Autor:  Reitinger Matthias a.k.a. reima (plz give proper credit)

class thumb
{
	var $im = 0;

	function thumb($file=0, $width=0, $height=0)
	{
		if ($file && $width && $height) {
			$this->create($file, $width, $height);
		}
	}

	function create($file, $width=0, $height=0, $resample=0)
	{
		if ($this->im) $this->clear();

		list($src_width, $src_height, $src_type) = getimagesize($file);
		if ($src_type != 2) return false; // kein jpeg => abbrechen
		
		if ($width == 0) {
			$width = round($height * ($src_width/$src_height));
		}
		if ($height == 0) {
			$height = round($width * ($src_height/$src_width));
		}
		
		$src_im = imagecreatefromjpeg($file);
		$this->im = imagecreatetruecolor($width, $height);
		
		if ($resample) {
			imagecopyresampled($this->im, $src_im, 0, 0, 0, 0,
				$width, $height, $src_width, $src_height);
		} else {
			imagecopyresized($this->im, $src_im, 0, 0, 0, 0,
				$width, $height, $src_width, $src_height);
		}
		
		imagedestroy($src_im);
				
		return true;
	}

	function savetofile($file, $quality=75)
	{
		imagejpeg($this->im, $file, $quality);
	}

	function output($quality=75)
	{
		header("Content-type: image/jpeg");
		imagejpeg($this->im, "", $quality);
	}

	function clear()
	{
		imagedestroy($this->im);
		$this->im = 0;
	}
}
?>

Benutzung

Beispiel 1:
PHP:
<?
include("class.thumb.php"); // oder was auch immer

$thumb = new thumb(); // Klasseninstanz erstellen
$thumb->create("bild1.jpg", 320, 240); // Thumbnail erstellen
$thumb->output(); // Bild an den Browser ausgeben
$thumb->clear(); // Aufräumen
?>
Ergebnis: Ausgabe eines 320x240 großen Thumbnails von bild1.jpg


Beispiel 2:
PHP:
<?
include("class.thumb.php");

$thumb1 = new thumb();
$thumb1->create("bild1.jpg", 320, 0, 0);
$thumb1->savetofile("bild1t1.jpg", 60); // Bild speichern
$thumb1->clear();

$thumb2 = new thumb();
$thumb2->create("bild1.jpg", 0, 480, 1);
$thumb2->savetofile("bild1t2.jpg", 80);
$thumb2->clear();
?>
Ergebnis:
1. Ein Thumbnail "bild1t1.jpg" mit folgenden Eigenschaften wird auf dem Server gespeichert:
Höhe: 320
Breite: wird automatisch ermittelt (0 bei create())
Verkleinerungsart: normal
Qualität: 60 (letzter Parameter bei savetofile)

2. Ein zweites Thumbnail "bild1t2.jpg" mit folgenden Eigenschaften wird auf dem Server gespeichert:
Höhe: wird automatisch ermittelt (wieder 0 bei create())
Breite: 480
Verkleinerungsart: Resampling (letzter, optionaler Parameter bei create() auf 1)
Qualität: 80


Du hast jetzt zwei Möglichkeiten bei deinem konkreten Problem: Entweder du erzeugst die Thumbnails direkt nach dem Hochladen und speicherst sie auf dem Server. Das garantiert schnelle Ladezeiten bei den Bildern, aber hohen Webspaceverbrauch. Die Alternative wäre, die Thumbnails auf Anforderung zu erzeugen und direkt an den Browser zu senden. Das erhöht zwar einerseits die Serverlast und im Extremfall auch die Ladezeiten, spart aber Webspace. Liegt an dir =)
 
hi reima,

ui ui ui, hätte nicht gedacht, dass dafür so ein act notwendig ist. Vielen Dank erstmal für deine Bemühung, ich werd das nun mal ausprobiern ;)

bye
 
Hi nochma,
hab soeben dein script ausprobiert, funzt ohne probleme, danke nochmal :)
Eine Frage hätte ich dann aber noch, und zwar, wo aktivier ich den GD Support bei meinem Apache System ?

bye
 
also mein server hat:
gd
GD Support enabled
GD Version 1.6.2 or higher
JPG Support enabled
PNG Support enabled
WBMP Support enabled


wenn ich jetzt die datei so mache wie oben beschrieben bekomme ich die fehler meldung:
Warning: imagecreatetruecolor(): requires GD 2.0 or later in /home/www/web207/html/msvp/habdichliebhasi/foto/class.thumb.php on line 31

Warning: imagecopyresized(): supplied argument is not a valid Image resource in /home/www/web207/html/msvp/habdichliebhasi/foto/class.thumb.php on line 38

Warning: imagejpeg(): supplied argument is not a valid Image resource in /home/www/web207/html/msvp/habdichliebhasi/foto/class.thumb.php on line 48

Warning: imagedestroy(): supplied argument is not a valid Image resource in /home/www/web207/html/msvp/habdichliebhasi/foto/class.thumb.php on line 59


Muss ich noch was installieren oder, ist meine gd version zu niedrig?!

Gre@tz Msv P!!!
 
ja gut hab ich auch gesehen, ich hofe jetzt eher auf ne lösung, um das problem zu umgehen?!

Gibts da ne alternative, oder so?
 
Zurück