php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 30-01-2009, 07:51
crussader
 Registrierter Benutzer
Links : Onlinestatus : crussader ist offline
Registriert seit: Jan 2009
Beiträge: 28
crussader ist zur Zeit noch ein unbeschriebenes Blatt
Standard png problem

diese frage wurde sicher schon 1000mal gestellt

sorry aber hab hier nicht wirklich was gefunden

ich erzeuge ein png mit php das scheint auch zu klappen nur die anzeige des bildes ist binär



ich hab im header :

PHP-Code:
    <meta http-equiv="content-type" content="image/png;"/> 
aufrufen tu ich das bild mit :
PHP-Code:
print '($myimg)'
und erstellt wird es mit :

PHP-Code:
class gd_gradient_fill {
    
    
// Constructor. Creates, fills and returns an image
    
function gd_gradient_fill($w,$h,$d,$s,$e,$step=0) {
        
$this->width $w;
        
$this->height $h;
        
$this->direction $d;
        
$this->startcolor $s;
        
$this->endcolor $e;
        
$this->step intval(abs($step));

        
// Attempt to create a blank image in true colors, or a new palette based image if this fails
        
if (function_exists('imagecreatetruecolor')) {
            
$this->image imagecreatetruecolor($this->width,$this->height);
        } elseif (
function_exists('imagecreate')) {
            
$this->image imagecreate($this->width,$this->height);
        } else {
            die(
'Unable to create an image');
        }
        
        
// Fill it
        
$this->fill($this->image,$this->direction,$this->startcolor,$this->endcolor);
        
        
// Show it        
        
$this->display($this->image);
        
        
// Return it
        
return $this->image;
    }
    
    
    
// Displays the image with a portable function that works with any file type
    // depending on your server software configuration
    
function display ($im) {
        if (
function_exists("imagepng")) {
            
header("Content-type: image/png");
            
imagepng($im);
        }
        elseif (
function_exists("imagegif")) {
            
header("Content-type: image/gif");
            
imagegif($im);
        }
        elseif (
function_exists("imagejpeg")) {
            
header("Content-type: image/jpeg");
            
imagejpeg($im""0.5);
        }
        elseif (
function_exists("imagewbmp")) {
            
header("Content-type: image/vnd.wap.wbmp");
            
imagewbmp($im);
        } else {
            die(
"Doh ! No graphical functions on this server ?");
        }
        return 
true;
    }
    
    
    
// The main function that draws the gradient
    
function fill($im,$direction,$start,$end) {
        
        switch(
$direction) {
            case 
'horizontal':
                
$line_numbers imagesx($im);
                
$line_width imagesy($im);
                list(
$r1,$g1,$b1) = $this->hex2rgb($start);
                list(
$r2,$g2,$b2) = $this->hex2rgb($end);
                break;
            case 
'vertical':
                
$line_numbers imagesy($im);
                
$line_width imagesx($im);
                list(
$r1,$g1,$b1) = $this->hex2rgb($start);
                list(
$r2,$g2,$b2) = $this->hex2rgb($end);
                break;
            case 
'ellipse':
                
$width imagesx($im);
                
$height imagesy($im);
                
$rh=$height>$width?1:$width/$height;
                
$rw=$width>$height?1:$height/$width;
                
$line_numbers min($width,$height);
                
$center_x $width/2;
                
$center_y $height/2;
                list(
$r1,$g1,$b1) = $this->hex2rgb($end);
                list(
$r2,$g2,$b2) = $this->hex2rgb($start);
                
imagefill($im00imagecolorallocate$im$r1$g1$b1 ));
                break;
            case 
'ellipse2':
                
$width imagesx($im);
                
$height imagesy($im);
                
$rh=$height>$width?1:$width/$height;
                
$rw=$width>$height?1:$height/$width;
                
$line_numbers sqrt(pow($width,2)+pow($height,2));
                
$center_x $width/2;
                
$center_y $height/2;
                list(
$r1,$g1,$b1) = $this->hex2rgb($end);
                list(
$r2,$g2,$b2) = $this->hex2rgb($start);
                break;
            case 
'circle':
                
$width imagesx($im);
                
$height imagesy($im);
                
$line_numbers sqrt(pow($width,2)+pow($height,2));
                
$center_x $width/2;
                
$center_y $height/2;
                
$rh $rw 1;
                list(
$r1,$g1,$b1) = $this->hex2rgb($end);
                list(
$r2,$g2,$b2) = $this->hex2rgb($start);
                break;
            case 
'circle2':
                
$width imagesx($im);
                
$height imagesy($im);
                
$line_numbers min($width,$height);
                
$center_x $width/2;
                
$center_y $height/2;
                
$rh $rw 1;
                list(
$r1,$g1,$b1) = $this->hex2rgb($end);
                list(
$r2,$g2,$b2) = $this->hex2rgb($start);
                
imagefill($im00imagecolorallocate$im$r1$g1$b1 ));
                break;
            case 
'square':
            case 
'rectangle':
                
$width imagesx($im);
                
$height imagesy($im);
                
$line_numbers max($width,$height)/2;
                list(
$r1,$g1,$b1) = $this->hex2rgb($end);
                list(
$r2,$g2,$b2) = $this->hex2rgb($start);
                break;
            case 
'diamond':
                list(
$r1,$g1,$b1) = $this->hex2rgb($end);
                list(
$r2,$g2,$b2) = $this->hex2rgb($start);
                
$width imagesx($im);
                
$height imagesy($im);
                
$rh=$height>$width?1:$width/$height;
                
$rw=$width>$height?1:$height/$width;
                
$line_numbers min($width,$height);
                break;
            default:
        }
        
        for ( 
$i 0$i $line_numbers$i=$i+1+$this->step ) {
            
// old values :
            
$old_r=$r;
            
$old_g=$g;
            
$old_b=$b;
            
// new values :
            
$r = ( $r2 $r1 != ) ? intval$r1 + ( $r2 $r1 ) * ( $i $line_numbers ) ): $r1;
            
$g = ( $g2 $g1 != ) ? intval$g1 + ( $g2 $g1 ) * ( $i $line_numbers ) ): $g1;
            
$b = ( $b2 $b1 != ) ? intval$b1 + ( $b2 $b1 ) * ( $i $line_numbers ) ): $b1;
            
// if new values are really new ones, allocate a new color, otherwise reuse previous color.
            // There's a "feature" in imagecolorallocate that makes this function
            // always returns '-1' after 255 colors have been allocated in an image that was created with
            // imagecreate (everything works fine with imagecreatetruecolor)
            
if ( "$old_r,$old_g,$old_b" != "$r,$g,$b"
                
$fill imagecolorallocate$im$r$g$b );
            switch(
$direction) {
                case 
'vertical':
                    
imagefilledrectangle($im0$i$line_width$i+$this->step$fill);
                    break;
                case 
'horizontal':
                    
imagefilledrectangle$im$i0$i+$this->step$line_width$fill );
                    break;
                case 
'ellipse':
                case 
'ellipse2':
                case 
'circle':
                case 
'circle2':
                    
imagefilledellipse ($im,$center_x$center_y, ($line_numbers-$i)*$rh, ($line_numbers-$i)*$rw,$fill);
                    break;
                case 
'square':
                case 
'rectangle':
                    
imagefilledrectangle ($im,$i*$width/$height,$i*$height/$width,$width-($i*$width/$height), $height-($i*$height/$width),$fill);
                    break;
                case 
'diamond':
                    
imagefilledpolygon($im, array (
                        
$width/2$i*$rw-0.5*$height,
                        
$i*$rh-0.5*$width$height/2,
                        
$width/2,1.5*$height-$i*$rw,
                        
1.5*$width-$i*$rh$height/), 4$fill);
                    break;
                default:    
            }        
        }
    }
    
    
// #ff00ff -> array(255,0,255) or #f0f -> array(255,0,255)
    
function hex2rgb($color) {
        
$color str_replace('#','',$color);
        
$s strlen($color) / 3;
        
$rgb[]=hexdec(str_repeat(substr($color,0,$s),2/$s));
        
$rgb[]=hexdec(str_repeat(substr($color,$s,$s),2/$s));
        
$rgb[]=hexdec(str_repeat(substr($color,2*$s,$s),2/$s));
        return 
$rgb;
    }
}
?> 
Angehängte Grafiken
Dateityp: jpg result.jpg (9,1 KB, 92x aufgerufen)
Mit Zitat antworten
  #2 (permalink)  
Alt 30-01-2009, 11:38
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Dir ist aber schon klar, dass du Bild und Markup über ein img-Tag mit src-Attribut voneinander trennen musst*?

* Inline-Images werden ja leider nicht komplett unterstützt.
Mit Zitat antworten
  #3 (permalink)  
Alt 30-01-2009, 14:40
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard Re: png problem

Zitat:
Original geschrieben von crussader
diese frage wurde sicher schon 1000mal gestellt

sorry aber hab hier nicht wirklich was gefunden
/
Dazu muss man auch nichts "finden", sondern mal kurz logisch nachdenken.

Wie bindest du denn normalerweise ein Bild in ein HTML-Dokument ein, wenn PHP gar nicht im Spiel ist?

Kopierst du da etwa die binaeren Daten aus der Bilddatei in das HTML-Dokument hinein? Nein? Wie kommst du dann auf die Idee, dass das ploetzlich sinnvoll sein koennte, nur weil die Bilddaten nicht in einer statischen Datei vorliegen, sondern per PHP erzeugt werden?


Die Antwort lautet also: Binde das Bild ganz genau so ein, als ob es statisch waere. Ein Client interessiert sich ueberhaupt nicht dafuer, ob eine Ressource auf dem Server statisch aus einer Datei erstellt, dynamisch von PHP erzeugt, oder von deiner Oma gestrickt wird. Also mache bei der clientseitigen Einbindung auch keinerlei Unterschied.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #4 (permalink)  
Alt 30-01-2009, 14:40
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard

Die Content-Type-Angabe macht den darunterstehenden PNG-Code kaputt. Es muß heißen:
header("Content-type: image/png");
Mit Zitat antworten
  #5 (permalink)  
Alt 31-01-2009, 05:51
crussader
 Registrierter Benutzer
Links : Onlinestatus : crussader ist offline
Registriert seit: Jan 2009
Beiträge: 28
crussader ist zur Zeit noch ein unbeschriebenes Blatt
Standard

wenn ich das nun alles so richtig verstanden habe muss ich das bild mit

PHP-Code:
<?
require_once('gd-gradient-fill.php');
$myimg = new gd_gradient_fill(80,20,'diamond','#ff0010','#303060');
?>

<img src="<? echo'$myimg'?>">
einbinden ?

klappt nicht
hab als aufruf noch
PHP-Code:
<?
require_once('gd-gradient-fill.php');
$myimg = new gd_gradient_fill(80,20,'diamond','#ff0010','#303060');
?>
<? header
("Content-type: image/png");?>
<body>
<? echo '<img src="'.$myimg.'">' ?>
</body>
versuch - ohne erfolg
es klappt nur wenn ich z.b. das bild vorher speicher
wie hier:
PHP-Code:
<?php 
// Beispiel für ein simples Bild
header("Content-type: image/png"); // Mime-Type setzen
$im     imagecreate(155,155); // Erstellt ein rechteckiges 
                               // Bild mit 155 Pixel Kantenlänge
$background_color ImageColorAllocate ($im255255255);
                       
// erste Farbe ist Hintergrundfarbe
$blue imagecolorallocate($im0128255); // Blau
$red =  imagecolorallocate($im255,0,0);  // Rot
$yellow imagecolorallocate($im255,255,0); // Gelb
// drei gefüllte Rechtecke
imagefilledrectangle $im55100,100,$red);
imagefilledrectangle $im7575150,150,$blue);
imagefilledrectangle $im8520140,160,$yellow);
$speichern '00'.'.png';
imagepng($im,$speichern); // Das Bild als PNG-Bild ausgeben
imagedestroy($im); // Alle Resourcen, die wegen des Bildes gehalten werden, freigeben.
echo '<img src="'.$speichern.'">'
?>
nur leider bekomm ich das in der anderen php nicht hin das das bild gespeichert wird.
hab in die funktion
display($im) versucht abzuändern :

PHP-Code:
    function display ($im) {
        if (
function_exists("imagepng")) {
            
header("Content-type: image/png");
$speichern 'test'.'.png';
imagepng($im,$speichern); // Das Bild als PNG-Bild ausgeben
imagedestroy($im); // Alle Resourcen, die wegen des Bildes gehalten werden, freigeben.
        

nur leider bleibt der bildschirm weiss
ich glaub mir fehlt die logic

Geändert von crussader (31-01-2009 um 05:58 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 31-01-2009, 07:07
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Na, dann guck mal was passiert, wenn du imagepng einen zweiten Parameter übergibst: http://de.php.net/imagepng
Mit Zitat antworten
  #7 (permalink)  
Alt 31-01-2009, 07:35
crussader
 Registrierter Benutzer
Links : Onlinestatus : crussader ist offline
Registriert seit: Jan 2009
Beiträge: 28
crussader ist zur Zeit noch ein unbeschriebenes Blatt
Standard

moinsen

nunja ich hab ja als 2. parameter $speichern übergeben - und in $speichern steht der dateiname : $speichern = '00'.'.png';

nur leider funktioniert das nur in dem beispiel mit den 3 rechtecken und in anderen beispielbildern.

wenn ich die gd_gradient_fill.php so abändere :
PHP-Code:
    // depending on your server software configuration
    
function display ($im) {
        if (
function_exists("imagepng")) {
            
header("Content-type: image/png");
$speichern 'test'.'.png';
imagepng($im,$speichern); // Das Bild als PNG-Bild ausgeben
imagedestroy($im); // Alle Resourcen, die wegen des Bildes gehalten werden, freigeben.
        

passiert nüx
Mit Zitat antworten
  #8 (permalink)  
Alt 31-01-2009, 07:42
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Was interessiert mich, was du als 2. Parameter übergibst? Ich habe dich auf was vollkommen anderes hingewiesen! Und dein Code ist identisch zu dem vorherigen.
Mit Zitat antworten
  #9 (permalink)  
Alt 31-01-2009, 08:04
crussader
 Registrierter Benutzer
Links : Onlinestatus : crussader ist offline
Registriert seit: Jan 2009
Beiträge: 28
crussader ist zur Zeit noch ein unbeschriebenes Blatt
Standard

also irgendwie verstehe ich dich nicht

erst sagst du :

Zitat:
unset Na, dann guck mal was passiert, wenn du imagepng einen zweiten Parameter übergibst: http://de.php.net/imagepng
und dann sag ich dir das der 2. parameter der dateiname ist .

jetzt sagst du :

Zitat:
unset Was interessiert mich, was du als 2. Parameter übergibst? Ich habe dich auf was vollkommen anderes hingewiesen! Und dein Code ist identisch zu dem vorherigen.
und als parameter finde ich hier :

$image
$filename
$quality
$filters

das bedeutet für mich
imagepng($image, $filename) damit ich die ausgabe von $image in eine datei schreiben kann - ist das so richtig ?

und wenn das passiert ist $imagedestroy($image) damit beim nächsten aufruf der seite das bild neu geladen werden kann
Mit Zitat antworten
  #10 (permalink)  
Alt 31-01-2009, 08:44
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Du sollst dem Link folgen und überprüfen, wie sich imagepng verhält, wenn du zusätzlich einen zweiten Parameter übergibst, dass in Beziehung zu deinem Problem setzen, dass das Bild nicht ausgegeben wird und dir so selbst helfen.

Verständlicher?
Mit Zitat antworten
  #11 (permalink)  
Alt 31-01-2009, 13:29
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von crussader
wenn ich das nun alles so richtig verstanden habe muss ich das bild mit [...] einbinden ?

klappt nicht
hab als aufruf noch [...] versuch - ohne erfolg
Da hast du immer noch binaere Bilddaten und HTML-Code innerhalb ein und der selben Ressource an den Browser ausgeliefert - dabei wurdest du bereits darauf hingewiesen, dass du das doch auch nicht so machst, wenn du ein statisches Bild einbindest. Also warum nimmst du an, dass das bei einem dynamischen Bild irgendwie sinnvoll sein koennte?

Zitat:
es klappt nur wenn ich z.b. das bild vorher speicher
Dann mach dir klar, was daran der Unterschied zu obigem Vorgehen ist.

Na?

Richtig, damit hast du zwei voneinander unabhaengige Ressourcen, die der Browser einzeln anfordert - einmal das HTML-Dokument, in dem der Browser <img src="..."> findet, und daraufhin stellt er eine zweite Anforderung an den Server, mit der bei ... angegebenen Adresse, und fordert damit das Bild separat an.

Das "zum Beispiel" ist das wichtige in deiner obigen Aussage. Wenn du es erst speicherst, dann hast du letztendlich wieder ein statisches Bild, dass du anschliessend irgendwo einbinden kannst.
Du musst es aber natuerlich nicht speichern, du kannst das Script die Bilddaten auch dynamisch ausgeben lassen - aber bitte so, dass dies mit einem zweiten, von der HTML-Seite vollkommen unabhaengigen Request passiert.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #12 (permalink)  
Alt 31-01-2009, 15:15
crussader
 Registrierter Benutzer
Links : Onlinestatus : crussader ist offline
Registriert seit: Jan 2009
Beiträge: 28
crussader ist zur Zeit noch ein unbeschriebenes Blatt
Standard

also ist mein problem nicht der code mit dem das bild erstellt wird sondern wie ich es aufrufe ?

gruss c.
Mit Zitat antworten
  #13 (permalink)  
Alt 31-01-2009, 15:33
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Ja (wenn wir "Aufrufen" zwecks etwas korrekterer Formulierung mal durch "Einbinden" ersetzen).
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #14 (permalink)  
Alt 31-01-2009, 15:57
crussader
 Registrierter Benutzer
Links : Onlinestatus : crussader ist offline
Registriert seit: Jan 2009
Beiträge: 28
crussader ist zur Zeit noch ein unbeschriebenes Blatt
Standard

na da bin ich ja schonmal bissi schlauer

ich hab eine datei erstellt - bild.php

der inhalt :

PHP-Code:
<?
require_once('gd-gradient-fill.php');
$myimg = new gd_gradient_fill(80,20,'diamond','#ff0010','#303060');
//$img = new gd_gradient_fill(400,200,'ellipse','#f00','#000',0);

echo '<img src="'.$myimg.'">'
?>
so müsste das doch dann eigentlich richtig sein
Mit Zitat antworten
  #15 (permalink)  
Alt 31-01-2009, 16:01
crussader
 Registrierter Benutzer
Links : Onlinestatus : crussader ist offline
Registriert seit: Jan 2009
Beiträge: 28
crussader ist zur Zeit noch ein unbeschriebenes Blatt
Standard

okokok - hab das ; hinter dem aufruf vergessen

SCHANDE ÜBER MICH

aber nu geht das - komisch ich dachte das hätt ich schon so versucht
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:48 Uhr.