php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.07.2007, 10:40  
Benutzer
 
Registriert seit: 11.09.2006
Beiträge: 48
zoro
Standard imagejpeg ausgabe funkt nicht

hallo habe dieses phpskript zur erstellung eines bildausschnittes und dessen ausgabe, aber was mir ausgegeben wird sind hyroglyphen. kann mir bitte jemand weiter helfen, finde nicht den fehler und auch keine anhaltspunkte im netz.
hier mein skript und meine ausgabe:

PHP-Code:
<?php
header
("Content-type: image/jpeg");
// Aufruf der Funktion: 
erzeugeBildausschnitt("test.jpg"); 

function 
erzeugeBildausschnitt($bildQuelle){
    
// welche Breite + Hoehe soll der Ausschnitt haben
    
$Ausschnitt_Breite 85;
    
$Ausschnitt_Hoehe 85;
    
    
// welcher Bereich soll dargestellt werden
    
$Position_x 0
    
$Position_y 0;
    
    
$img1 imagecreatefromjpeg($bildQuelle);//OriginalDatei
    
$img2 imagecreatetruecolor($Ausschnitt_Breite$Ausschnitt_Hoehe);//Neue Datei mit Auschnitt der Originaldatei
    
    //Was soll geschehen?
    //Aus der Hauptdatei soll ein Auschnitt (x: 15px; y:15 px; Breite: 70px; Höhe: 140px)
    //in die Neue Dateu ($img2) kopiert werden.
    
imagecopymerge($img2$img100$Position_x$Position_y$Ausschnitt_Breite$Ausschnitt_Hoehe100);
    
    
//Die neue Datei wird unter einem anderen Namen abgespeichert (und anschließend Speicher gelöscht)
    
    
imagejpeg($img2);
    
imagedestroy($img1);
    
imagedestroy($img2);

}
?>
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Unbenanntes Dokument</title>
</head>

<body>

ÿØÿ*�JFIF������ÿþ�>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality
ÿÛ�C�		

 $.' ",#(7),01444'9=82<.342ÿÛ�C			
[..]
:D}zšÙ�úƤyfâºÍ%&˜¢”«zÊ*›¢Jwj(«hbÓZ(©´g*( cªK47`c8 E*ï	ŽT“‘ô'—6?×·ëþ4Q]-c,ÊØûCÑE$¬]ÿÙ
</body>

</html>
wäre dankbar, wenn mir jemmand eine kleine hilfe geben könnnte. danke


Edit by Zergling: Binärcode gekürzt, zerschießt sonst die Breite der Seite, bitte in Zukunft selbst darauf achten.
zoro ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 30.07.2007, 10:53  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo, das Problem ist offensichtlich:
Du mischt HTML-Code und JPEG-Binärcode. Das funktioniert so nicht. Ein Bild
musst du in HTML immernoch mit dem <img>-Tag einbinden.

Das heißt jetzt für dich, du musst die Erzeugung des JPEGs in eine eigene
Datei auslagern. Dazu musst du (wie du es bereits tust) den richtigen header
senden und mit imagejpeg() ausgeben. In dieser Datei darf aber kein HTML
vorkommen.

Speicher also den obigen Code ab in der Datei "create-jpg.php".
In deinem HTML-Code kannst du nun die Datei einbinden:
Code:
[img]create-jpg.php[/img]
Zergling-new ist offline  
Alt 30.07.2007, 11:12  
Benutzer
 
Registriert seit: 11.09.2006
Beiträge: 48
zoro
Standard

danke super, jetzt funktioniert es einwandfrei.
zoro ist offline  
Alt 30.07.2007, 18:09  
Benutzer
 
Registriert seit: 11.09.2006
Beiträge: 48
zoro
Standard

habe das ganze jetzt noch ein wenig erweitert und wollte mir jetzt aus allen bildern die in meiner datenbank sind immer 11 per random ausgeben lassen. ich bekomme aber nur 11 schwarze bilder. kann es sein das der bildpfad nicht weitergegeben wird? und wie kann ich diesen weitergeben? hier mein code:

PHP-Code:
<?php
include ("php/referenzen/settings.php");
include (
"php/referenzen/mysql_tabels.php");

include (
"php/mysql_connect.php");

$db_connect mysql_connect ($dbhost$dbuser$dbpass);
$db_select mysql_select_db ($dbname);

$max_pictures_string "SELECT * FROM $picture_list WHERE status='1'";
$db_max_pictures mysql_query ($max_pictures_string,$db_connect);
$bilderanzahl mysql_num_rows ($db_max_pictures);

?>
<?php 
if ($_GET['page'] != "bilder"){
?>
<div id="gallery_unten">

<?php
if ($bilderanzahl>0) {
// Vorschaubilder anzeigen
if ($bilderanzahl<11) {
$maxbilder=$bilderanzahl;
}
if (
$bilderanzahl>11) {
$maxbilder=11;
}
$pictures_string "SELECT * FROM $picture_list WHERE status='1' ORDER BY RAND() LIMIT 11";
$db_pictures mysql_query ($pictures_string,$db_connect);
for (
$j=0;$j<$maxbilder;$j++) {   
            
$daten mysql_fetch_array ($db_pictures,MYSQL_BOTH);                               
            
// Beginn der Bildertabelle
            
$datei_bytes=filesize("php/referenzen/".$daten[gallery_ordner]."/img/$daten[picture_name]");
            
$datei_kbytes=round(($datei_bytes/1024),0);
             echo 
"<div id=\"bild_gallery\"><a href=\"main.php?page=bilder&ordner=$daten[gallery_ordner]\">"
             if (
file_exists ("php/referenzen/".$daten[gallery_ordner]."/thumbs/$daten[picture_name]") && $daten[picture_name] != "") {
             echo 
"[img]create_jpg.php[/img]</a>";
             }
             else {
             echo 
"[img]images/no_thumb.gif[/img]</a>";
             }
             echo 
"</div>";
             
// Ende der Bildertabelle
    
}
// Ende Vorschaubilder anzeigen
}
?>


</div>
<?php 
}
?>
</div>
und das ist meine create_jpg.php:

PHP-Code:
<?php
header
("Content-type: image/jpeg");

// Aufruf der Funktion: 
erzeugeBildausschnitt("php/referenzen/".$daten[gallery_ordner]."/thumbs/$daten[picture_name]"); 

function 
erzeugeBildausschnitt($bildQuelle){
    
// welche Breite + Hoehe soll der Ausschnitt haben
    
$Ausschnitt_Breite 85;
    
$Ausschnitt_Hoehe 85;
    
    
// welcher Bereich soll dargestellt werden
    
$Position_x 0
    
$Position_y 0;
    
    
$img1 imagecreatefromjpeg($bildQuelle);//OriginalDatei
    
$img2 imagecreatetruecolor($Ausschnitt_Breite$Ausschnitt_Hoehe);//Neue Datei mit Auschnitt der Originaldatei
    
    //Was soll geschehen?
    //Aus der Hauptdatei soll ein Auschnitt (x: 15px; y:15 px; Breite: 70px; Höhe: 140px)
    //in die Neue Dateu ($img2) kopiert werden.
    
imagecopymerge($img2$img100$Position_x$Position_y$Ausschnitt_Breite$Ausschnitt_Hoehe100);
    
    
//Die neue Datei wird unter einem anderen Namen abgespeichert (und anschließend Speicher gelöscht)
    
    
imagejpeg($img2);
    
imagedestroy($img1);
    
imagedestroy($img2);

}
?>
zoro ist offline  
Alt 30.07.2007, 18:44  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Moment du bringst hier die ganze Zeit etwas durcheinander.

Es handelt sich hier um eigenständige Skripte. Du kannst nicht einfach in der create_jpg.php auf den in deiner gallery_list.php (oder wie die Datei heißt) erstellten PHP-Array zugreifen.

Du musst der create_jpg.php schon irgendwie die Info übergeben, für welches Bild nun ein Thumbnail erzeugt werden soll.

Mehrere Hinweise noch:
Dein Skript ist ineffektiv und verschwendet massiv Resourcen,
1.) durch MySQL
Code:
$max_pictures_string = "SELECT * FROM $picture_list WHERE status='1'";
$db_max_pictures = mysql_query ($max_pictures_string,$db_connect);
$bilderanzahl = mysql_num_rows ($db_max_pictures);
Das ist schlecht. Du holst ALLE Spalten und Datensätze der Tabelle deren status = 1 ist und zählst danach lediglich das Ergebnis. Das ist wahnsinnig ineffektiv. Das ist wie wenn ich dich zu deinem Opa schicke, die Äpfel an den Bäumen in seinem Garten zu zählen. Ruf ihn lieber an und lass ihn das machen. Geht schneller (gehen wir davon aus, Opa ist genauso auf Zack wie du)

Einträge zählen tust du auf diese Weise:
PHP-Code:
<?php
$sql 
"SELECT COUNT(*) FROM tabelle WHERE condition = 1";
$res mysql_query($sql$connection) or die(mysql_error());
$total mysql_result($res0);
printf("Insgesamt %u Einträge gefunden."$total);
?>
Aber das beste ist, das benötigst du garnicht, denn ein SELECT wird trotz LIMIT nicht mehr Ergebnisse liefern als vorhanden sind.

PHP-Code:
<?php
$sql 
sprintf("SELECT `id` FROM `%s` WHERE `status` = 1 ORDER BY RAND() LIMIT 11"$picture_list);
$res mysql_query($sql$connection) or die(mysql_error());
while (
$dat mysql_fetch_assoc($res)) {
  
printf('[img]create_jpg.php?id=%u[/img]
'
$dat['id']);
}
?>
Deine create_jpg.php bekommt nun also per $_GET['id'] die Datenbank-ID übermittelt, die sie thumbnailen und anzeigen soll.

Schritt 1:
Jetzt wandel in deiner create_jpg.php $_GET['id'] zum Beispiel mittels
PHP-Code:
<?php
$id 
intval(@$_GET['id']);
?>
in eine Zahl um (wer weiß was ein Hacker sonst übergibt).
Das @ unterdrückt einen Fehler, sollte kein Wert übergeben werden, intval() wandelt das 1. Argument in einen INTEGER um, sollte es nicht sowieso einer sein. Anderfalls wird 0 daraus.

Schritt 2:
Schau nach ob die Datei für diese ID bereits als Cache-Datei existiert (häh?! - lies weiter, hierzu kommen wir gleich).
Wenn ja, zeig die Cache-Datei an und beende das Skript mittels exit;

Schritt 3:
Hol dir den Pfad des Bildes mit der übergebenen ID aus der Datenbank.

Schritt 4:
Verkleinere das Bild so wie du es bereits tust.

Schritt 5:
Übergebe imagejpg() als 2. Parameter einen eindeutigen Cache-Dateinamen. Jetzt wird das Bild nicht mehr sofort angezeigt, sondern zunächst in einer Datei gespeichert. Der Vorteil ist, zukünftig kannst du statt der aufwändigen Berechnung die Cache-Datei öffnen.
Jetzt öffne die Datei die du gerade gecachet hast mit readfile($pfad);

Voila, ein performanter Thumbnailer mit Cache!
Falls du sicherstellen kannst, dass nur lokale Bildpfade übergeben werden, kannst du statt der ID auch den Pfad der Datei übergeben, die verkleinert werden soll. Dann kannst du dir den Overhead des "Bildpfad über die ID aus der Datenbank holen" sparen. Pass allerdings auf, dass niemand dein Skript mißbraucht, um sich extern Thumbnails erzeugen zu lassen.
Zergling-new ist offline  
Alt 30.07.2007, 22:31  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

... *Bockmarked*
Schau dir auch mal die verschiedenen Scripte bzw. die Bibliothek von CIX88 an:
http://www.cix88.de/sitemap.php
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit Ausgabe eines gifs für ein Captcha Canni HTML, Usability und Barrierefreiheit 5 15.07.2008 19:05
Problem mit der Ausgabe Kein Genie PHP Tipps 2006 5 26.11.2006 21:24
Objekt Ausgabe in Array konvertieren duderino PHP Tipps 2006 8 11.11.2006 14:29
Farbe des SQL-Ergebnisses in der Ausgabe Peer PHP Tipps 2006 14 14.09.2006 08:51
Problem mit Ausgabe bzw. Abfrage mit ORDER BY mayer Datenbanken 7 02.07.2006 21:45
[Erledigt] SELECT Problem - keine Ausgabe. Datenbanken 1 24.10.2005 02:06
Ausgabe der Auswahlliste PHP Tipps 2005-2 6 21.09.2005 13:43
3 Tabellen verbunden -- Ausgabe in einer Spalte Datenbanken 4 06.09.2005 10:43
PHP-Magazin - Ausgabe 5.2005 imported_Ben Off-Topic Diskussionen 1 08.08.2005 08:39
[Erledigt] Geteilte Ausgabe an den Browser... PHP-Fortgeschrittene 4 01.07.2005 13:07
Echo ausgabe Zeitlich verzögern? medico HTML, Usability und Barrierefreiheit 14 03.01.2005 08:23
[Erledigt] formatierung der ausgabe, felder mit zeilenumbruch Datenbanken 4 25.11.2004 10:34
Ausgabe nur dann, wenn htmlspecialchars() verwendet PHP Tipps 2004 1 27.10.2004 21:17
[Erledigt] Sortierung der Ausgabe PHP-Fortgeschrittene 3 08.10.2004 09:22
[Erledigt] Prozedurale Bibliothek für HTML Ausgabe PHP Tipps 2004 0 06.07.2004 11:59

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
imagejpeg kein bild, imagejpeg ausgeben, imagejpeg ausgabe, imagepng ausgabe, imagejpeg, imagejpeg() ausgabe, imagejpeg \kein bild\, image jpg öffnen, php imagepng zeigt kein bild, http://www.php.de/php-tipps-2007/44472-imagejpeg-ausgabe-funkt-nicht.html, imagecreatefromjpeg zeigt hieroglyphen, imagejpeg hyroglyphen, imagejpeg php gibt kein bild aus, image.jpeg.limit deutsch, imagepng keine bild anzeige, imagejpg php, php nach imagejpeg html ausgeben, php imagepng kein bild, javascript jfif ausgeben, php imagegif() direktausgabe geht nicht

Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.