kann mir neimand helfen oder sagen wie ich mehere bilder per php ineinanderfügen (zusammenfügen) kann?
Hi,
ich weiß, dass es sehr ungeschickt ist, das so zu Coden wie ich es gemacht hab![]()
Also ich brauche Hilfe: Ich habe einen Counter gecodet, der auf Textdateien zurückgreift usw. zuerst habe ich das ganze so gelößt, dass er den Counterstand nach jedem zeichen geteilt hat und in einen Array geschrieben hat. Für jedes dieser Zeichen hab ich dann das Bild mit der Zahl ausgegeben.
Jetzt möchte ich das aber ein bisschen erweitern und möchte statt den einzelbildern ein neues Bild generieren.
Hier mein Code:
Jetzt kommt aber immerPHP-Code:Header("Content-Type: image/jpeg");
#echo "<br>Aktion: $action<br>"; ### Zum Löschen!
#echo "<br>Count_ID: $count_id<br>"; ### Zum Löschen!
### Alle Buchstaben (groß und klein) und alle nicht nicht alphanumerischen Zeichen werden gelöscht: ###
$count_id = preg_replace("/[a-z_A-Z_\W]/", "", $count_id);
### Alle Zahlen und alle nicht nicht alphanumerischen Zeichen werden gelöscht: ###
$count_style = preg_replace("/[0-9_\W]/", "", $count_style);
if ($count_id == 0 OR $count_id == "" OR ereg("[a-z_A-Z_\W]",$count_id))
{
#echo "<br><-- ERROR! --><br>";
}
elseif ($count_id!= "" AND ereg("[0-9]",$id) )
{
$datei = fopen("counts/". $count_id. ".txt","a+");
rewind($datei);
$counterstand = fgets($datei);
fclose($datei);
#echo "<br>Counter vorher: $counterstand<br>"; ### Zum Löschen!
if($counterstand == "")
{
$counterstand = 0;
}
$counterstand++;
$datei = fopen("counts/". $count_id. ".txt","w");
rewind($datei);
fwrite($datei, $counterstand);
fclose($datei);
##############
#echo "<br>Counter nachher: ". $counterstand. "<br>";
$letters_count = wordwrap($counterstand, 1, "|", 1);
$array_count = explode("|", $letters_count);
$bild == 0;
foreach($array_count as $l_count)
{
$pic = $count_style. "/". $l_count. ".gif";
### For Each 1: ###
$img_a[$bild] = imagecreatefromgif($pic);
$size[$bild] = getimagesize($pic);
$gesamtbreite = $gesamtbreite + $size[$bild][0];
$bild++;
}
$bild == 0;
$img_end = ImageCreate($gesamtbreite, $size[$bild][1]); # Hier wird das Bild einer Variable zu gewiesen
$black = ImageColorAllocate($img_end, 0, 0, 0); # Hier wird der Variable $black die Farbe schwarz zugewiesen
# Die drei nullen bestehen aus den RGB-Parametern. 255, 0, 0 wäre z.B. rot. ($img muss am Anfang stehen)
ImageFill($img_end, 0, 0, $black); # Hier wird mit ImageFill() das Bild gefüllt an den Koordinaten 0 und 0 mit der Variable $black, also Schwarz
Imagejpeg($img_end); # Hier wird das Bild PNG zugewiesen
foreach($array_count as $l_count)
{
$pic = $count_style. "/". $l_count. ".gif";
### For Each 2: ###
$width = $size[$bild][0];
$height = $size[$bild][1];
imagecopy($img_end, $img_a[$bild], $breite_x, "0", "0", "0", $width, $height);
$breite_x = $breite_x + $size[$bild][1];
$bild++;
}
imagejpeg($img_end);
Achja, über diesem PHP-Code hab ich noch das hingemacht:Code:Die Grafik "http://board9.bo.funpic.de/home/counter/index.php?a=count&id=2&s=c" kann nicht angezeigt werden, weil sie Fehler enthält.kann mir jemand sagen, entweder wo mein Fehler (meine Fehler vermutlich) liegen und wie ich sie beheben kann oder wie ich aus 3-8 einzelbildern ein neues bild generieren kann?PHP-Code:$action = $_GET['a'];
$count_id = $_GET['id'];
$count_style = $_GET['s'];
$count_style = strtolower ($count_style);
if ($action == "")
{
$action = "count";
}
if ($count_id == "")
{
$count_id = "0";
}
Geändert von Dome (28.09.2005 um 14:57 Uhr)
Gruß
Dome
__________________
Um mal auf das Renomee-System aufmerksam zu machen: Klick
TP Battlebay: www.tp-battlebay.de.ki (endlich wieder Online!)
kann mir neimand helfen oder sagen wie ich mehere bilder per php ineinanderfügen (zusammenfügen) kann?
Gruß
Dome
__________________
Um mal auf das Renomee-System aufmerksam zu machen: Klick
TP Battlebay: www.tp-battlebay.de.ki (endlich wieder Online!)
http://www.php.net/manual/de/ref.image.php
RTFM .. sry
an deiner stelle wuerde ich den teil mit dem bildaufbau aus dem script auslagern. es steht zu vermuten, dass hier ein fehler in einem ganz anderen teil des scripts aufgetreten sein koennte und somit ein header vor dem bildheader ausgegeben wird. damit bekommst du auf jeden fall eine fehlerausgabe fuer das bild. und die kann z.b. so aussehen wie die, die du gepostet hast.
vielleicht bekommst du dann eine eindeutigere fehlerausgabe raus.
gruss
hardy
werd mich bald darüm kümmern, da ich zuerst meinen pc formatieren muss
hatte nen fehler im betriebssystem....
Gruß
Dome
__________________
Um mal auf das Renomee-System aufmerksam zu machen: Klick
TP Battlebay: www.tp-battlebay.de.ki (endlich wieder Online!)
Hallo Dome.. Hab im Prinzip genau das Script was du suchst selbst mal gecodet. Wenn ich heute abend wieder an meinem Rechner bin, dann setze ich den Quältext hier mal rein..
Je größer der Deppenfaktor, desto gigantischer das Bescheidwissergefühl
-Dieter Nuhr
ok danke! und mein pc funzt auch wieder![]()
Gruß
Dome
__________________
Um mal auf das Renomee-System aufmerksam zu machen: Klick
TP Battlebay: www.tp-battlebay.de.ki (endlich wieder Online!)
Hoffe, es hilft dir.PHP-Code:<?php
//Zahl wird in String umgewandelt
settype($number,"string");
//Arrays für die wichtigen Daten (Dateiname, Bildbreite)
$files=array();
$size=array();
//Bilder werden bestimmt, Größe ausgelesen und in die entsprechenden Array gespeichert
for($x=0;$x<strlen($number);$x++) {
$file="{$number[$x]}_rot.png"; //Hier den Dateinamen angeben
$file_size = getimagesize("Zahlen/{$file}"); //Hier vorher den relativen Pfad ändern
array_push($files,$file);
array_push($size,$file_size[0]);
}
//Gesamtgröße des neuen Bildes wird ermittelt
$sum=array_sum($size);
//Neues bild wird erstellt. Alle benutzten Bilder sind 25px hoch
$image = imagecreatetruecolor($sum,25);
//Bilder werden nacheinander in das neue Bild kopiert. $x_dist gibt die Breite des Vorherigen Bildes an und damit den int_x Wert, wohin kopiert wird
$dist=array();
for($x=0;$x< count($files);$x++) {
$pfad="Zahlen/{$files[$x]}";
$img=imagecreatefrompng($pfad);
$img_size=$size[$x];
$x_dist=array_sum($dist);
array_push($dist,$img_size);
ImageCopy($image,$img, $x_dist,0, 0,0, $img_size,20);
}
//Farbe wird transparent gesetzt..
$farbe_b=imagecolorallocate($image,0,0,0);
imagecolortransparent($image,$farbe_b);
//Bild wird ausgegeben
header("Content-Type: image/png");
imageinterlace($image,1);
ImagePNG($image);
ImageDestroy ($image);
?>
$number ist die Zahl, die Später ausgegeben wird. Du musst mehrere Graphiken mit fortlaufender nummerierung anfertigen. Das ist jetzt für pngs ausgelegt, funktioniert ist aber nicht schwer für andere Graphikformate umzuschreiben..
Je größer der Deppenfaktor, desto gigantischer das Bescheidwissergefühl
-Dieter Nuhr
ich werds morgen testen...
ich hab morgen früh ein eignungstest, deswegen erst gegen nachmittag...
aber auf jeden fall danke!
Gruß
Dome
__________________
Um mal auf das Renomee-System aufmerksam zu machen: Klick
TP Battlebay: www.tp-battlebay.de.ki (endlich wieder Online!)
also funzt super! Danke!
nur noch eins:
bei machen "styles" gibts unten einen scharzen rand, wie kann ich den wegmachen? ==> Anhang
achja ich hab den transparenten hintergrund abgeschaltet...
Gruß
Dome
__________________
Um mal auf das Renomee-System aufmerksam zu machen: Klick
TP Battlebay: www.tp-battlebay.de.ki (endlich wieder Online!)
Ich glaube, die Größenangaben passen in meinem Script nicht so ganz. Da wird ein 25px großes Bild erstellt, die Bilder aber nur in 20px größe reinkopiert..
Je größer der Deppenfaktor, desto gigantischer das Bescheidwissergefühl
-Dieter Nuhr
ich dachte eigentlich dass ich die größe auf $size[1] gestellt hatte...
hier mal das script...
....PHP-Code:<?php
$action = $_GET['a'];
$count_id = $_GET['id'];
$count_style = $_GET['s'];
$count_style = strtolower ($count_style);
if ($action == "")
{
$action = "count";
}
if ($count_id == "")
{
$count_id = "0";
}
if ($count_style == "")
{
$count_style = "a";
}
#################################################################################################################
Überall wo # davor steht, wollte ich es nicht weg machen, kann ja sein, dass ich nen fehler gemacht hab...PHP-Code:# Header("Content-Type: image/jpeg");
#echo "<br>Aktion: $action<br>"; ### Zum Löschen!
#echo "<br>Count_ID: $count_id<br>"; ### Zum Löschen!
### Alle Buchstaben (groß und klein) und alle nicht nicht alphanumerischen Zeichen werden gelöscht: ###
$count_id = preg_replace("/[a-z_A-Z_\W]/", "", $count_id);
### Alle Zahlen und alle nicht nicht alphanumerischen Zeichen werden gelöscht: ###
$count_style = preg_replace("/[0-9_\W]/", "", $count_style);
if ($count_id == 0 OR $count_id == "" OR ereg("[a-z_A-Z_\W]",$count_id))
{
#echo "<br><-- ERROR! --><br>";
}
elseif ($count_id!= "" AND ereg("[0-9]",$id))
{
$datei = fopen("counts/". $count_id. ".txt","a+");
rewind($datei);
$counterstand = fgets($datei);
fclose($datei);
#echo "<br>Counter vorher: $counterstand<br>"; ### Zum Löschen!
if($counterstand == "")
{
$counterstand = 0;
}
$counterstand++;
$datei = fopen("counts/". $count_id. ".txt","w");
rewind($datei);
fwrite($datei, $counterstand);
fclose($datei);
##############
#echo "<br>Counter nachher: ". $counterstand. "<br>";
$letters_count = wordwrap($counterstand, 1, "|", 1);
$array_count = explode("|", $letters_count);
# $bild == 0;
# foreach($array_count as $l_count)
# {
# $pic = $count_style. "/". $l_count. ".gif";
# ### For Each 1: ###
# $img_a[$bild] = imagecreatefromgif($pic);
# $size[$bild] = getimagesize($pic);
# $gesamtbreite = $gesamtbreite + $size[$bild][0];
# $bild++;
# }
# $bild == 0;
#
# $img_end = ImageCreate($gesamtbreite, $size[$bild][1]); # Hier wird das Bild einer Variable zu gewiesen
# $black = ImageColorAllocate($img_end, 0, 0, 0); # Hier wird der Variable $black die Farbe schwarz zugewiesen
# Die drei nullen bestehen aus den RGB-Parametern. 255, 0, 0 wäre z.B. rot. ($img muss am Anfang stehen)
# imagefill($img_end, 0, 0, $black); # Hier wird mit ImageFill() das Bild gefüllt an den Koordinaten 0 und 0 mit der Variable $black, also Schwarz
# imagejpeg($img_end);
#
# foreach($array_count as $l_count)
# {
# $pic = $count_style. "/". $l_count. ".gif";
# ### For Each 2: ###
# $width = $size[$bild][0];
# $height = $size[$bild][1];
# imagecopy($img_end, $img_a[$bild], $breite_x, "0", "0", "0", $width, $height);
# $breite_x = $breite_x + $size[$bild][1];
# $bild++;
# }
#imagejpeg($img_end);
}
$number = $counterstand;
################################################# Imagescript Anfang #################################################
//Zahl wird in String umgewandelt
settype($number,"string");
//Arrays für die wichtigen Daten (Dateiname, Bildbreite)
$files=array();
$size=array();
//Bilder werden bestimmt, Größe ausgelesen und in die entsprechenden Array gespeichert
for($x=0;$x<strlen($number);$x++)
{
$file="{$number[$x]}.png"; //Hier den Dateinamen angeben
$file_size = getimagesize($count_style. "/{$file}"); //Hier vorher den relativen Pfad ändern
array_push($files,$file);
array_push($size,$file_size[0]);
}
//Gesamtgröße des neuen Bildes wird ermittelt
$sum=array_sum($size);
//Neues bild wird erstellt. Alle benutzten Bilder sind 25px hoch
$image = imagecreatetruecolor($sum,$file_size[1]);
//Bilder werden nacheinander in das neue Bild kopiert. $x_dist gibt die Breite des Vorherigen Bildes an und damit den int_x Wert, wohin kopiert wird
$dist=array();
for($x=0;$x< count($files);$x++)
{
$pfad= $count_style. "/{$files[$x]}";
$img=imagecreatefrompng($pfad);
$img_size=$size[$x];
$x_dist=array_sum($dist);
array_push($dist,$img_size);
ImageCopy($image,$img, $x_dist,0, 0,0, $img_size,20);
}
//Farbe wird transparent gesetzt..
$farbe_b=imagecolorallocate($image,0,0,0);
#imagecolortransparent($image,$farbe_b); //Farbe wird transparent gesetzt..
//Bild wird ausgegeben
header("Content-Type: image/png");
imageinterlace($image,1);
ImagePNG($image);
ImageDestroy ($image);
################################################# Imagescript Ende #################################################
Gruß
Dome
__________________
Um mal auf das Renomee-System aufmerksam zu machen: Klick
TP Battlebay: www.tp-battlebay.de.ki (endlich wieder Online!)
Adromir hat Dir doch den Anhaltspunkt geliefert.
Spiel doch mit der Zeile
ImageCopy($image,$img, $x_dist,0, 0,0, $img_size,20);
statt 20 nimm 25 und schaus Dir an![]()
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
sorry hab zu spät gelesen und ich habs dann selber gefunden
also ich hab jetzt einfach
"ImageCopy($image,$img, $x_dist,0, 0,0, $img_size,20);"
umgeändert in
"ImageCopy($image,$img, $x_dist,0, 0,0, $img_size,$file_size[1]);"
dann kann man nämlich so große bilder wie man will damit verarbeiten!
aber nochmal danke an St@eff.en und natürlich auch an Adromir und alle anderen!
es funzt wirklich super!
Geändert von Dome (09.10.2005 um 01:42 Uhr)
Gruß
Dome
__________________
Um mal auf das Renomee-System aufmerksam zu machen: Klick
TP Battlebay: www.tp-battlebay.de.ki (endlich wieder Online!)
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)