Antworten auf deine Fragen:
Neues Thema erstellen

Bildgröße mit PHP

CanTk

Nicht mehr ganz neu hier

Hey!

Folgendes Problem ich will extern geladene Bilder (aufgrund der Nutzungsbedingungen darf ich sie nicht auf meinem Server zwischenspeichern) nach 2 Fällen "resizen" lassen ohne sie dazu bei mir speichern zu müssen.

Mit HTML geht das ja, dass ich nach einem Fall gehe, also zB. nur die Breite angebe und alle Bilder in der Höhe angepasst werden.



Ich hab aber eine max Breite und eine max Höhe. Kann PHP das irgendwie erkennen wie groß das Bild ist und dann berechnen welche Seite er wie groß machen muss damit das Bild in keinem Fall breiter // höher als 120px ist?

Ich bin in PHP ehr so der Anfänger. Hat da jemand ne Idee für mich ?

Gruß Can
 

Doitsu

Aktives Mitglied

AW: Bildgröße mit PHP

Ja, du kannst dir mit getimagesize die Breite/Hoehe des Bildes holen.
Dann tust du deine maximale Breite durch die Breite des Bildes teilen, genau so bei der Hoehe und schaust dann ob das Ergebnis < 1 ist.
Nun musst du nun schauen ob das Ergebnis von der Breite kleiner als das Ergebnis von der Hoehe ist, wenn ja teilst du die Breite vom Bild durch den Quotient von der Maxbereite - wen nicht durch den von der Hoehe.
 

sokie

Mod | Web

AW: Bildgröße mit PHP

über alle zur Verfügung stehenden Funktionen um die Bildmanipulation kannst du dir hier ein Bild machen:PHP: GD- und Image-Funktionen - Manual

um zu ermitteln, ob es sich um ein Hoch- oder Querformat handelt kannst du die funktion getimagesize() verwenden:
PHP:
$bild = "http://pfad/zum/bild.jpg";
$info = getimagesize($bild); //Breite und höhe sind in $info[0] und $info[1];
$verh = $info[0] / $info[1]
so bekommst du in $verh einen wert bei dem es sich um eine zahl > 1 bei querformaten und < 1 bei hochformaten handelt, mit denen du arbeiten kannst.
 

kleeaar

zwo-eins-risiko!

AW: Bildgröße mit PHP

PHP:
<?php
    $testdatei = $_GET['pfad'];
	$quali = $_GET['qualitaet'];
// die Parameter die als Get-Variablen übergeben werden.
    $size      = GetImageSize($testdatei);

	if($size[0]>$size[1]){
	$pro=150/$size[1];
	$height=$size[1]*$pro;
	$width=$size[0]*$pro;
	}else if($size[0]<$size[1]){
	$pro=150/$size[0];
	$height=$size[1]*$pro;
	$width=$size[0]*$pro;
	}
//das Bild wird skaliert auf die Breite von 150 px bei Hochformat, oder auf die Höhe von 150px bei Querformat

 $new_image = imagecreatetruecolor($width, $height);
    $old_image = ImageCreateFromJpeg($testdatei);
    ImageCopyResized($new_image, $old_image,0 , 0, 0, 0, $width, $height, $size[0], $size[1]);

        header("Content-type: image/jpeg");
        ImageJpeg($new_image,'',$quali);

?>
ein kleines skript, das ich dafür nutze...
vllt hilft es dir als Denkanstoss!
Grüße
 

Doitsu

Aktives Mitglied

AW: Bildgröße mit PHP

@ Kleeaar:
Unpraktische Methode, die setzt vorraus, dassdas Bild min. 150 Pixel gross ist - wenn ich nun aber nur ein 16x16 Pixel grosses Bild habe ist es auf einmal 9x so gross.

hier mal eine kleine Funktion:
PHP:
	function resize($filename, $alt) {
		if(fopen($filename, 'r')) { // Ist die Datei lesbar / vorhanden?
			list($width, $height) = getimagesize($filename); // Breite / Hoehe auslesen

			$maxwidth = 140; // Maximae Breite
			$maxheight = 140; // Maximale Hoehe

			// Verhaeltnisse ausrechnen
			$factor_width = $maxwidth / $width;
			$factor_height = $maxheight / $height;

			// Pruefen ob das Bild skaliert werden muss
			if($factor_width < 1 || $factor_height < 1) {

				// durch den Breitenfaktor, oder Hoehenfaktor multiplizieren
				if($factor_width < $factor_height) {
					$height = round($height * $factor_width);
					$width = round($width * $factor_width);
				}
				elseif($factor_height < $factor_width) {
					$height = round($height * $factor_height);
					$width = round($width * $factor_height);
				}
			}

			return '<img src="' . $filename . '" alt="' . $alt . '" width="' . $width . '" height="' . $height . '" />';
		}
		else { // Fehler
			return false;
		}
	}
 

stroyer

Aktives Mitglied

AW: Bildgröße mit PHP

täuscht es mich oder ändert sich bei beiden Scripts die Bildgröße nicht, wenn das Bild zwar die gleiche Proportion hat wie das gewünschte Endbild aber trotzdem größer ist?
Weiters ist in jedem Fall (mind.) eine Seitenlänge fix. Das vorherige Script würde ich daher wie folgt umändern:
PHP:
if($factor_width < $factor_height) {
  $height = round($height * $factor_width);
  $width = $maxwidth;
}
else{
$height = $maxheight;
$width = round($width * $factor_height);
}
Prinzipiell gibt es eben zwei Möglichkeiten um das Bild zu verkleinern: 1) Wie kleeaar, dass der Server sich das Bild holt, verkleinert und ausgiebt (getImageSize liest meines Wissens nach nur die ersten 12 Byte des Stream) und 2) wie Doitsu, dass sich der Server nur die Größe holt und der Browser sich das unverkleinerte Bild holen muss.
Was besser ist, hängt vom Verwendungszweck ab.
Natürlich wäre es sinnvoller Möglichkeit 1 zu wählen und die entstandenen Bilder zu cachen. Wenn das nicht geht, verursacht diese Möglichkeit je nach Bildgröße und Aufrufanzahl teils enormen Traffic.
Bei Möglichkeit 2 wird dir der User wahrscheinlich nicht danken, da er größere Datenmengen downloaden muss und durch die (wahrscheinlich) niedrigere Bandbreite es auch langsamer geht als bei 1).
Anregung zu 2: img verkleinert automatisch mit den richtigen Proportionen, solange nur ein Maß angegeben wird:
PHP:
function resize($filename,$alt,$maxwidth = 140,$maxheight = 140){
  if(fopen($filename, 'r')){
    list($width, $height) = getimagesize($filename);
    $factor_width = $maxwidth / $width;
    $factor_height = $maxheight / $height;
    if($factor_width < 1 || $factor_height < 1){
      if($factor_width<$factor_height){
        $newwidth=true;
      }else{
        $newheight=true;
      }
    }
    return "<img src='$filename' alt='$alt'".(isset($newwidth)?"width='$maxwidth'":(isset($newheight)?"height='$maxheight'":""))." />";
  }else{return false;}
}
Falls du das Bild übrigens zentrieren willst, pack es in ein DIV mit maxwidth und maxheight und text-align:center
 

Doitsu

Aktives Mitglied

AW: Bildgröße mit PHP

täuscht es mich oder ändert sich bei beiden Scripts die Bildgröße nicht, wenn das Bild zwar die gleiche Proportion hat wie das gewünschte Endbild aber trotzdem größer ist?

Du taeuschst dich, Wenn ich ein Bild uebergebe was in der Breite groesser ist und in der Hoehe kleiner, wird es so verkleinert das die Breite passt - andersherum natuerlich auch. Da nur geschaut wird ob ein Faktor kleiner als 1 ist, wenn dem so ist muss es halt verkleinert werden - egal in welche Richtung.
Wenn beide groesser sind als die erlaubte Groesse wird halt geschaut welches Verhaeltnis groesser ist und dieses entsprechend genommen.

Warum ich nix mit caching gemacht habe steht im Eingangspost:
Folgendes Problem ich will extern geladene Bilder (aufgrund der Nutzungsbedingungen darf ich sie nicht auf meinem Server zwischenspeichern)

edit @stroyer:
Stimmt, hast Recht. Daran habe ich gar nicht gedacht. :/
 
Zuletzt bearbeitet:

stroyer

Aktives Mitglied

AW: Bildgröße mit PHP

Caching habe ich nur der Vollständigkeit halber erwähnt, deshalb danach auch auf 2) verwiesen.
Bsp. wenn maxwidth=200 und maxheight=150 und width=400 und height=300 sind factor_width und factor_height gleich und bei
PHP:
if($factor_width < $factor_height) {

}elseif($factor_height < $factor_width) {

}
wird dann nichts durchlaufen.
 
C

chiryphp

Guest

AW: Bildgröße mit PHP

PHP Code:
001<?php
002//this class is not part of Resize and upload image class.
003//this class is property of some one else.
004//I get this from phpclasses.org but forget the name of author.
005//sorry for that.
006
007class Image {
008 var $FileName;
009 var $FileSize;
010 var $FileType;
011 var $AllowedExtentions = array ("image/png", "image/gif", "image/jpeg", "image/pjpeg", "image/jpg");
012 var $newWidth = 100; // new width
013 var $newHeight = 100; //new height
014 var $TmpName;
015 var $PicDir; //store uploaded images
016 var $MaxFileSize = 2000000; //kbytes
017 var $ImageQuality = 100; // image compression (max value 100)
018
019 function Image($FileName) {
020 $this->FileName=$FileName;
021 }
022
023 function GetInfo() {
024 $out=' <br><br>Upload success!<br>
025 Name: '.$this->FileName.'<br>
026 file size: '.$this->FileSize.' byte<br>
027 file type: '.$this->FileType.'<br>
028 <img src=' . dirname($_SERVER['PHP_SELF']) . '/' . $this->PicDir . $this->FileName . '><br><br>';
029
030 return $out;
031 }
032
033
034 function GetFileExtention ($FileName) {
035 if (in_array ($this->FileType, $this -> AllowedExtentions)) {
036 return true;
037 } else {
038 return false;
039 }
040
041 }
042
043 function ExistFile () {
044 $fileexist = $_SERVER['DOCUMENT_ROOT'] .
045 dirname($_SERVER['PHP_SELF']) .
046 '/' . $this->PicDir .
047 $this->FileName;
048 if (file_exists($fileexist)) { return true; }
049 }
050
051 function GetError ($error) {
052
053 switch ($error) {
054 case 0 :
055 return "Error: Invalid file type <b>$this->FileType</b>! Allow type: .jpg, .jpeg, .gif, .png <b>$this->FileName</b><br>";
056 break;
057
058 case 1 :
059 return "Error: File <b>$this->FileSize</b> is too large! You must upload 1000 MB file<br>";
060 break;
061
062 case 2 :
063 return "Error: Please, select a file for uploading!<br>";
064 break;
065
066 case 3 :
067 return "Error: File <b>$this->FileName</b> already exist!<br>";
068 break;
069 }
070
071 }
072
073
074 function Resize () {
075 // header('Content-Type: image/gif');
076 if (empty ($this->TmpName)) {return $this -> GetError (2);}
077 else if ($this->FileSize > $this->MaxFileSize) {return $this -> GetError (1);}
078 else if ($this -> GetFileExtention ($this->FileName) == false) {return $this -> GetError (0);}
079 else if ($this -> ExistFile()) {return $this -> GetError (3);}
080
081 else {
082
083 $ext = explode(".",$this->FileName);
084 $ext = end($ext);
085 $ext = strtolower($ext);
086
087 // Get new sizes
088 list($width_orig, $height_orig) = getimagesize($this->TmpName);
089
090 $ratio_orig = $width_orig/$height_orig;
091
092 if ($this->newWidth/$this->newHeight > $ratio_orig) {
093 $this->newWidth = $this->newHeight*$ratio_orig;
094 } else {
095 $this->newHeight = $this->newWidth/$ratio_orig;
096 }
097
098 $normal = imagecreatetruecolor($this->newWidth, $this->newHeight);
099
100 if ($ext == "jpg") { $source = imagecreatefromjpeg($this->TmpName); }
101 else if ($ext == "gif") { $source = imagecreatefromgif ($this->TmpName); }
102 else if ($ext == "png")
103 {
104 $this->ImageQuality = 9;
105 $source = imagecreatefrompng ($this->TmpName);
106 }
107
108 imagecopyresampled($normal, $source, 0, 0, 0, 0, $this->newWidth, $this->newHeight, $width_orig, $height_orig);
109
110
111 if ($ext == "jpg") {
112 //ob_start();
113 imagejpeg($normal, "$this->PicDir/$this->FileName", "$this->ImageQuality");
114 //$binaryThumbnail = ob_get_contents();
115 //ob_end_clean();
116 }
117 else if ($ext == "gif") { imagegif ($normal, "$this->PicDir/$this->FileName", "$this->ImageQuality"); }
118 else if ($ext == "png") { imagepng ($normal, "$this->PicDir/$this->FileName", "$this->ImageQuality"); }
119
120 imagedestroy($source);
121
122 //echo $this -> GetInfo();
123
124 }
125
126 }
127
128 function Save() {
129 if (empty ($this->TmpName)) {return $this -> GetError (2);}
130 else if ($this->FileSize > $this->MaxFileSize) {return $this -> GetError (1);}
131 else if ($this -> GetFileExtention ($this->FileName) == false) {return $this -> GetError (0);}
132 else if ($this -> ExistFile ()) {return $this -> GetError (3);}
133
134 else {
135
136 copy($this->TmpName,$this->PicDir.$this->FileName);
137
138 //echo $this -> GetInfo();
139
140 }
141 }
142 }
143
144?>





Einige PHP PDF Skripte im auf der Seite aufgelistet
 

stroyer

Aktives Mitglied

AW: Bildgröße mit PHP

Benutzer bitte die [ php] tags und lass die Zeilennummern weg, sonst ist der Code schlecht lesbar/kopierbar.
Eigentlich ist es aber um folgendes Problem gegangen:
Folgendes Problem ich will extern geladene Bilder (aufgrund der Nutzungsbedingungen darf ich sie nicht auf meinem Server zwischenspeichern)
daher das Bild abzuspeichern ist genau das, was nicht erwünscht war.
Noch dazu finde ich das Script von der Programmierung her nicht gerade gut (was zB macht es bitte für einen Sinn bei Thumbnails zwischen png, gif und jpeg zu unterscheiden?)
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben