Hallo,
habe PHP 4.4.3 im Einsatz und mir von php.net/manual/de die Funktion für imageRotate() eingebunden, weil die gd-Bibliothek nicht gebundled mit PHP kam. Nun habe ich das Problem, dass zwar das Bild gedreht wird, aber alles bleibt schwarz?! Es handelt sich hierbei um einen Counter, bei dem die Zahlen als einzelne GIFs abgelegt sind und dann zusammengesetzt werden, dann soll das Bild gedreht werden. Auf meinem alten Server hat der Code super funktioniert, ich habe jetzt nur die Funktion eingefügt...
Beispiel:
www.its-chemnitz.de/a/test.php?id=1 funktioniert ja super aber
www.its-chemnitz.de/a/test.php?id=23 bringt den oben beschriebenen Effekt
Ich hoffe der Quellcode ist einiger Maßen lesbar, ist jetzt schon paar Jahre alt das Skript. Wer findet einen Fehler?
habe PHP 4.4.3 im Einsatz und mir von php.net/manual/de die Funktion für imageRotate() eingebunden, weil die gd-Bibliothek nicht gebundled mit PHP kam. Nun habe ich das Problem, dass zwar das Bild gedreht wird, aber alles bleibt schwarz?! Es handelt sich hierbei um einen Counter, bei dem die Zahlen als einzelne GIFs abgelegt sind und dann zusammengesetzt werden, dann soll das Bild gedreht werden. Auf meinem alten Server hat der Code super funktioniert, ich habe jetzt nur die Funktion eingefügt...
Beispiel:
www.its-chemnitz.de/a/test.php?id=1 funktioniert ja super aber
www.its-chemnitz.de/a/test.php?id=23 bringt den oben beschriebenen Effekt
Ich hoffe der Quellcode ist einiger Maßen lesbar, ist jetzt schon paar Jahre alt das Skript. Wer findet einen Fehler?
PHP-Code:
<?php
// $src_img - a GD image resource
// $angle - degrees to rotate clockwise, in degrees
// returns a GD image resource
// USAGE:
// $im = imagecreatefrompng('test.png');
// $im = imagerotate($im, 15);
// header('Content-type: image/png');
// imagepng($im);
function imageRotate($src_img, $angle, $bicubic=false) {
// convert degrees to radians
$angle = $angle + 180;
$angle = deg2rad($angle);
$src_x = imagesx($src_img);
$src_y = imagesy($src_img);
$center_x = floor($src_x/2);
$center_y = floor($src_y/2);
$cosangle = cos($angle);
$sinangle = sin($angle);
$corners=array(array(0,0), array($src_x,0), array($src_x,$src_y), array(0,$src_y));
foreach($corners as $key=>$value) {
$value[0]-=$center_x; //Translate coords to center for rotation
$value[1]-=$center_y;
$temp=array();
$temp[0]=$value[0]*$cosangle+$value[1]*$sinangle;
$temp[1]=$value[1]*$cosangle-$value[0]*$sinangle;
$corners[$key]=$temp;
}
$min_x=1000000000000000;
$max_x=-1000000000000000;
$min_y=1000000000000000;
$max_y=-1000000000000000;
foreach($corners as $key => $value) {
if($value[0]<$min_x)
$min_x=$value[0];
if($value[0]>$max_x)
$max_x=$value[0];
if($value[1]<$min_y)
$min_y=$value[1];
if($value[1]>$max_y)
$max_y=$value[1];
}
$rotate_width=round($max_x-$min_x);
$rotate_height=round($max_y-$min_y);
$rotate=imagecreatetruecolor($rotate_width,$rotate_height);
imagealphablending($rotate, false);
imagesavealpha($rotate, true);
//Reset center to center of our image
$newcenter_x = ($rotate_width)/2;
$newcenter_y = ($rotate_height)/2;
for ($y = 0; $y < ($rotate_height); $y++) {
for ($x = 0; $x < ($rotate_width); $x++) {
// rotate...
$old_x = round((($newcenter_x-$x) * $cosangle + ($newcenter_y-$y) * $sinangle))
+ $center_x;
$old_y = round((($newcenter_y-$y) * $cosangle - ($newcenter_x-$x) * $sinangle))
+ $center_y;
if ( $old_x >= 0 && $old_x < $src_x && $old_y >= 0 && $old_y < $src_y ) {
$color = imagecolorat($src_img, $old_x, $old_y);
} else {
// this line sets the background colour
$color = imagecolorallocatealpha($src_img, 255, 255, 255, 127);
}
#echo $old_x." ".$old_y." ".$color."<br>";
imagesetpixel($rotate, $x, $y, $color);
}
}
return($rotate);
}
function errorpic($error_msg) {
$img=ImageCreate(strlen($error_msg)*7, 13);
$red=ImageColorAllocate($img, 255, 0, 0);
$bg=ImageColorAllocate($img, 255, 255, 255);
ImageFilledRectangle($img, 0, 0, strlen($error_msg)*7, 13, $bg);
ImageString($img, 3, 0, 0, $error_msg, $red);
ImagePng($img);
ImageDestroy($img);
die();
}
function errortxt($error_msg) {
echo $error_msg;
die();
}
require "counter.inc";
$id=trim($_GET["id"]);
$txt=trim($_GET["txt"]);
# Ausgabe als Text oder Grafik?
if ($txt!="")
$txt=true;
else
$txt=false;
if (!$id)
if ($txt)
errortxt("ID fehlt!");
else
errorpic("ID fehlt!");
if (!checkid($id))
if ($txt)
errortxt("Ungültige ID!");
else
errorpic("Ungültige ID!");
$prefs=getid($id);
$count=$prefs["cnt_wert"];
$ip=$_SERVER["REMOTE_ADDR"];
if ($prefs["cnt_art"]==2) {
# jeder Besucher wird gezählt
$count+=1;
setcount($id, $count);
} else {
# echte Besucher werden gezählt
if (checklog($id, $ip)) {
updatelog($id, $ip);
} else {
$count+=1;
setcount($id, $count);
setlog($id, $ip);
}
}
$len=strlen(strval($count));
if ($len>$prefs["cnt_len"])
$width=$len;
else
$width=$prefs["cnt_len"];
if ($txt) {
if ($width>$len)
for ($i=0;$i<($width-$len);$i++)
echo "0";
echo $count;
} else {
$digitdir="./digits/typ_".$prefs["cnt_typ"];
if (!file_exists("$digitdir/0.gif"))
errorpic("Keine Bilder im Verzeichnis!");
Header("Content-type: image/png");
clearstatcache();
$d0=ImageCreateFromGif("$digitdir/0.gif");
$dx=ImageSX($d0);
$dy=ImageSY($d0);
$img=ImageCreate($width*$dx, $dy);
ImageDestroy($d0);
$xoff=$width*$dx;
while($xoff > 0) {
$digit=$count%10;
$count=$count/10;
$temp=ImageCreateFromGif("$digitdir/$digit.gif");
$xoff=$xoff-$dx;
ImageCopyResized($img, $temp, $xoff, 0, 0, 0, $dx, $dy, $dx, $dy);
ImageDestroy($temp);
}
$transcol=split(",",$prefs["cnt_trans"]);
if (count($transcol)>2) {
$col_trans=ImageColorResolve($img,intval($transcol[0]),intval($transcol[1]),intval($transcol[2]));
$col_trans=ImageColorTransparent($img,$col_trans);
}
if ($prefs["cnt_rot"])
$img=imageRotate($img, $prefs["cnt_rot"]);
ImagePng($img);
ImageDestroy($img);
}
?>
Kommentar