php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.09.2007, 01:38  
Erfahrener Benutzer
 
Registriert seit: 08.03.2005
Beiträge: 476
Plague
Standard Voraussetzungen für dieses Thumbnail Skript

Hallo,

ich habe das unten stehende Skript um Bilder zu verkleinern. Jedoch funktioniert es auf meinem Server einfach nicht. Kann mir jemand sagen was für Voraussetzungen erfüllen sein müssen um dieses die Methoden auszuführen?

Gruß
Thomas

PHP-Code:
class thumbnail
{

    var 
$img;
    var 
$fileInfo;
var 
$fullName;
    var 
$newX;
    var 
$newY;
    var 
$quality;
    var 
$orgX;
    var 
$orgY;

    
// $data - (voller) Dateiname oder String (z.B. aus Datenbank)
    
function create($data)
    {

        
$this->destroy();

        if (
file_exists($data)) {
            
$this->img = @ImageCreateFromJpeg($data);
            
$this->fileInfo basename($data);
            
$this->fullName $data;
        } else {
            
$this->img = @ImageCreateFromString($data);
        }

        if (!
$this->img) {
            
$this->destroy();
            return 
false;
        } else {
            
$this->orgX ImageSX($this->img);
            
$this->orgY ImageSY($this->img);
            return 
true;
        }
    }

    
// Höhe des aktuellen Bildes im Container zurückgeben, false bei Fehler
    
function height()
    {
        if (
$this->img) {
            return 
ImageSY($this->img);
        } else {
            return 
false;
        }
    }

    
// Breite des aktuellen Bildes im Container zurückgeben, false bei Fehler
    
function width()
    {
        if (
$this->img) {
            return 
ImageSX($this->img);
        } else {
            return 
false;
        }
    }

    
// Qualität für Ausgabe setzen
    
function setQuality($quality false)
    {
        if (
$this->img && $quality) {
            
$this->quality $quality;
        } else {
            return 
false;
        }
    }

    
// Thumbnail erzeugen
    
function resize($newX false,$newY false)
    {
        if (
$this->img) {

            
$X ImageSX($this->img);
            
$Y ImageSY($this->img);

            
$newX $this->_convert($newX,$X);
            
$newY $this->_convert($newY,$Y);

            if (!
$newX && !$newY) {
                
$newX $X;
                
$newY $Y;
            }

            if (!
$newX) {
                
$newX round($X / ($Y $newY));
            }

            if (!
$newY) {
                
$newY round($Y / ( $X $newX));
            }

            if ( ! 
$newimg ImageCreateTruecolor($newX,$newY)) {
                
$newimg ImageCreate($newX,$newY);
            }

            if ( ! 
ImageCopyResampled ($newimg$this->img0000$newX$newY,$X,$Y)) {
                
ImageCopyResized ($newimg$this->img0000$newX$newY,$X,$Y);
            }

            
$this->img $newimg;

            return 
true;
        } else {
            return 
false;
        }
    }


    
// Schneidet ein Bild neu zu
    /* Werte für cut (X stellt das Ergebnis dar)

          $srcX
          +---+--------------+
    $srcY |   |              |
          +---+---+          |
          |   | X | $newY    | Ursprungsbild
          |   +---+          |
          |    $newX         |
          |                  |
          +------------------+
    */
    
function cut($newX,$newY,$srcX 0,$srcY 0)
    {

        if (
$this->img) {

            
$X ImageSX($this->img);
            
$Y ImageSY($this->img);

            
$newX $this->_convert($newX,$X);
            
$newY $this->_convert($newY,$Y);

            if (!
$newX) {
                
$newX $X;
            }

            if (!
$newY) {
                
$newY $Y;
            }

            if ( ! 
$newimg ImageCreateTruecolor($X,$Y)) {
                
$newimg ImageCreate($X,$Y);
            }
            
ImageCopy ($newimg,$this->img,0000,$X,$Y);
            
ImageDestroy($this->img);
            if ( ! 
$this->img ImageCreateTruecolor($newX$newY)) {
                
$this->img ImageCreate($newX$newY);
            }
            
imagecopy ($this->img,$newimg00,$srcX$srcY$newX$newY);
            
ImageDestroy($newimg);

            return 
true;

        } else {
            return 
false;
        }
    }


    
/* schneidet ein Teil mit Größe newX und newY an festgelegten Stellen des Bildes zu
    $pos = Position welches Teil verwendet werden soll
    +---+---+---+
    | 1 | 2 | 3 |
    +---+---+---+
    | 4 | 5 | 6 | 
    +---+---+---+
    | 7 | 8 | 9 |
    +---+---+---+
    */
    
function autocut($newX,$newY,$pos 5)
    {
        if (
$this->img) {

            
$X ImageSX($this->img);
            
$Y ImageSY($this->img);

            
$newX $this->_convert($newX,$X);
            
$newY $this->_convert($newY,$Y);

            if (!
$newX) {
                
$newX $X;
            }

            if (!
$newY) {
                
$newY $Y;
            }

            switch (
$pos) {
                case 
1:
                    
$srcX 0;
                    
$srcY 0;
                break;

                case 
2:
                    
$srcX round(($X 2)-($newX/2));
                    
$srcY 0;
                break;

                case 
3:
                    
$srcX ImageSX($this->img) - $newX;
                    
$srcY 0;
                break;

                case 
4:
                    
$srcX 0;
                    
$srcY round(($Y 2)-($newY/2));
                break;

                case 
5:
                    
$srcX round(($X 2)-($newX/2));
                    
$srcY round(($Y 2)-($newY/2));
                break;

                case 
6:
                    
$srcX $X-$newX;
                       
$srcY round(($Y 2)-($newY/2));
                break;

                case 
7:
                    
$srcX 0;
                       
$srcY $Y $newY;
                break;

                case 
8:
                    
$srcX round(($X 2)-($newX/2));
                       
$srcY $Y-$newY;
                break;

                case 
9:
                    
$srcX $X$newX;
                       
$srcY $Y $newY;
                break;

                default:
                    
$srcX round(($X 2)-($newX/2));
                    
$srcY round(($Y 2)-($newY/2));
            }

            return 
$this->cut($newX,$newY,$srcX,$srcY);
        } else {
            return 
false;
        }
    }

    
// erzeugt ein Quadrat des Bildes mit Kantenlänge von $size
    // ist das Bild nicht quadratisch kann mit $pos
    // der Bildausschnitt festgelegt werden, Werte siehe function autocut
    
function cube($size,$pos 5)
    {
        if (
$this->img) {

            
$X ImageSX($this->img);
            
$Y ImageSY($this->img);

            if (
$X $Y)
            {
                
$newX false;
                
$newY $size;
            } elseif (
$X $Y) {
                
$newX $size;
                
$newY false;
            } else {
                
$newX $size;
                
$newY $size;
            }

            if (
$this->resize($newX,$newY)) {
                return 
$this->autocut($size,$size,$pos);
            } else {
                return 
false;
            }
        } else {
            return 
false;
        }
    }


    
// erzeugt ein Bild dessen größte Kantenlänge $size ist
    
function maxSize($size)
    {
        if (
$this->img) {

            
$X ImageSX($this->img);
            
$Y ImageSY($this->img);

            if (
$X $Y)
            {
                
$newX $size;
                
$newY false;
            } elseif (
$X $Y) {
                
$newX false;
                
$newY $size;
            } else {
                
$newX $size;
                
$newY $size;
            }
            return 
$this->resize($newX,$newY);
        } else {
            return 
false;
        }
    }

    
// erzeugt ein Bild dessen kleinste Kantenlänge $size ist
    
function minSize($size)
    {
        if (
$this->img) {

            
$X ImageSX($this->img);
            
$Y ImageSY($this->img);


            if (
$X $Y)
            {
                
$newX false;
                
$newY $size;
            } elseif (
$X $Y) {
                
$newX $size;
                
$newY false;
            } else {
                
$newX $size;
                
$newY $size;
            }
            return 
$this->resize($newX,$newY);
        } else {
            return 
false;
        }
    }

    
// speichert das Bild als $fileName
    // wird $filename angegeben muss es ein voller Dateiname mit Pfad sein
    // ist $override wahr wird ein bestehendes Bild überschrieben, sonst nicht
    // Rückgabe:
    //        true wenn geschrieben (oder überschrieben)
    //         false on error
    //         0 wenn schon existiert (nur bei $override=false)
    
function save($fileName$override true)
    {
        if (
$this->img) {
            if (!
file_exists($fileName) || $override)  {
                if (
ImageJPEG($this->img,$fileName,$this->quality)) {
                    return 
true;
                } else {
                    return 
false;
                }
            } else {
                return 
0;
            }
        } else {
            return 
false;
        }
    }

    
// Gibt Bild an Browser aus (Ausgabe des Headers, Destroy aufrufen), beide optional
    
function output($sendHeader true,$destroy true)
    {
        if (
$this->img) {

                if (
$sendHeader) {
                    
header("Content-type: image/jpeg");
                }

                
ImageJPEG($this->img,"",$this->quality);

                if (
$destroy) {
                    
$this->destroy();
                }

        } else {
            return 
false;
        }
    }

    
// Setzt die Werte in der Klasse frei und löscht Bild
    
function destroy()
    {
        if (
$this->img) {
            
ImageDestroy($this->img);
        }
        
$this->img false;
        
$this->fileInfo false;
        
$this->fullName false;
        
$this->newX false;
        
$this->newY false;
        
$this->quality 70;
        
$this->orgX false;
        
$this->orgY false;
    }

    
// rechnet prozentuale Angaben in Pixel um, erwartet
    // ist $value eine Prozentangabe $full als 100% in Pixel angegeben werden
    
function _convert($value,$full false)
    {
        if (
strstr($value,"%")) {
            
$value trim(str_replace ("%"""$value));
            
$value = ($full 100) * $value;
        }
        if (
$value && $value !== false) {
            
$value 1;
        }
        return 
$value;
    }


Plague ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 19.09.2007, 07:29  
CIX88
Gast
 
Beiträge: n/a
Standard

Zitat:
Jedoch funktioniert es auf meinem Server einfach nicht
Gibt es denn eine Fehlermeldung, falls ja dann bitte mit Posten.
Rätzelstunde ist nicht ...
 
Alt 19.09.2007, 08:30  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Nach über 300 Einträgen solltest du mittlerweile wissen wie man hier postet oder? Ich schau mir auch nicht jede Funktion an und guck ob die vielleicht nur PHP5 kompatibel ist oder ähnliches. Also bitte eine Fehlermeldung posten oder die Problemzone einschränken.
cycap ist offline  
Alt 19.09.2007, 09:30  
Erfahrener Benutzer
 
Registriert seit: 08.03.2005
Beiträge: 476
Plague
Standard

Genau das ist es ja, es gibt keine Fehlermeldung! Es wird einfach nur kein Bild zurück gegeben. Ich dachte erst es liegt an der php_gd2.dll Bibliothek aber die ist auch korrekt installiert.
Plague ist offline  
Alt 19.09.2007, 09:36  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

error_reporting(E_ALL); :wink:
cycap ist offline  
Alt 19.09.2007, 11:20  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

und '@' bitte auch entfernen.
bei den manchen Foren werden die scripts überhaupt nicht angesehen, bzw als Verstoss gegen Forenregeln betrachtet, im Fall wenn error_reporting(E_ALL) in code nicht vorhanden ist, oder '@' im code stecken.
__________________
Slava
http://bituniverse.com
Slava ist offline  
Alt 19.09.2007, 11:27  
Erfahrener Benutzer
 
Registriert seit: 08.03.2005
Beiträge: 476
Plague
Standard

Ich war ein solcher Idiot.
Das einzige was gefehlt hat war der header mit Content: jpg

Jetzt klappt es. Grundlegend scheint es aber auch oft an der fehlenden gd2 Komponente zu liegen!

Deshalb gab es auch keine Fehler. Der Code wurde korrekt abgearbeitet, nur die Art des Outputs war einfach nicht definiert.

Also danke an alle!
Plague ist offline  
Alt 19.09.2007, 12:54  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

<<Grundlegend scheint es aber auch oft an der fehlenden gd2 Komponente zu liegen!>>
dann gibt es aber die fehlermeldungen, besonders wenn man '@' entfernt.
und wenn man die zweifeln hat, ob die funktion vorhanden ist, dann gibt es
if(function_exists('functionname'))
__________________
Slava
http://bituniverse.com
Slava ist offline  
Alt 19.09.2007, 13:32  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Nächstes mal kommt der Thread wieder in die Tonne, ohne Fehlermeldung machts keinen Sinn und wenn der header() nicht mitgeschickt wurde, wird zumindest der Binärcode angezeigt, dann hätte man wenigstens das erwähnen können.
Zergling-new ist offline  
Alt 19.09.2007, 13:35  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

wenn kein Moderator da is kann ihn auch keiner in die Tonne werfen :wink:
cycap 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
PHP Skript ausführen max-dhom PHP Tipps 2008 5 13.04.2008 12:39
Skript auf einem anderen Server! aha_01 PHP Tipps 2008 3 05.12.2007 09:02
Startup Skript m_haussner Datenbanken 3 10.10.2007 20:56
Skript in Skript ausführen? Plague PHP Tipps 2007 3 19.04.2007 09:59
.htpasswd (im geschützten Ordner!) per skript ändern! Funky_ PHP Tipps 2006 8 22.07.2006 18:03
ein Skript startet ein zweites... ajo_silent PHP-Fortgeschrittene 8 03.05.2006 13:42
Skript &amp;amp;amp;quot;tarnen&amp;amp;amp;quot;? Off-Topic Diskussionen 17 07.08.2005 19:42
Ein php skript aus einem anderen skript heraus aufrufen PHP Tipps 2005-2 8 06.08.2005 20:23
Javascript - CountUP Skript zählt falsch.. Chr!s HTML, Usability und Barrierefreiheit 0 28.03.2005 14:32
[Erledigt] php skript ruft anderes php skript auf PHP-Fortgeschrittene 7 09.01.2005 23:06
[Erledigt] problem mit login skript | mysql | cookie PHP Tipps 2004-2 13 07.12.2004 19:01
array_push nur in begrenzter Anzahl ausführen ? PHP Tipps 2004 2 07.09.2004 09:05
SKRIPT GESUCHT - Werbung auf einer site anzeigen Beitragsarchiv 4 29.08.2004 14:07
[Erledigt] Php skript upload problem! PHP Tipps 2004 2 30.06.2004 00:06
[Erledigt] Php Skript an Html Formular binden!! PHP Tipps 2004 3 17.06.2004 23:27

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php imagecopyresampled minsize, server vorraussetzungen imagecreate, php upload quadrat vorschaubild, \data - (voller) dateiname oder string (z.b. aus datenbank)\, php imagecreate prozentuale breite

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:06 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.