Hallo,
ich habe auf meiner Homepage einen Skript, der mir automatisch eine Bildergallerie erstellen kann, und bei dem man auch die Möglichkeit hat, Bilder als eCards zu versenden.
Bislang lief alles glatt auf dem Server, bis zu dem Tag als mein Homepage-Provider sein Server geupdated hat, und eine neuere Version von PHP und Co. installiert hat.
Mein Skript geht zwar immer noch, doch das ist nun das grosse Problem:
Die Bilder werden mit 256 Farben angezeigt, was dazu führt dass die Qualität der Bilder miserabel ist. Nach Angaben meines Providers muss ich eine Funktion ändern, die bei mir mit GD 1.6. anstatt mit GD 2.0. .
Da ich aber jetzt nicht weiss wie ich das ändern soll (weil ich nicht weiss WAS ich genau ändern soll), wollt ich fragen ob jemand eine Lösung für dieses Problem hätte...
Die Datei MAKEIMG.PHP , die die Bilder generiert, habe ich hier unten kopiert:
<?php
header("Cache-Control: public");
function errImg($errtype)
{
global $size;
$im = imagecreate(100, 76);
if($size == "thumb")
{
$bgc = imagecolorallocate($im, 107, 105, 239);
} else {
$bgc = imagecolorallocate($im, 255, 255, 255);
}
$tc = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 100, 76, $bgc);
if($errtype == "type")
{
imagestring($im, 3, 1, 5, "PICTURE FORMAT", $tc);
imagestring($im, 3, 3, 20, "NOT SUPPORTED", $tc);
} else if($errtype == "notfound") {
imagestring($im, 3, 22, 5, "PICTURE", $tc);
imagestring($im, 3, 16, 20, "NOT FOUND", $tc);
}
imagepng($im);
imagedestroy($im);
}
if($reductor < 0.5 && $size != "thumb")
{
header("HTTP/1.0 403 Forbidden");
exit();
}
if($type == "coords")
{
header("Content-Type: image/png");
$uri = "./galleries/".$size."/".$gallery."/".$pic;
} else if ($type == "id") {
header("Content-Type: image/png");
include "./include/config.inc.php";
include "./include/mysql.inc.php";
$query = "SELECT gallery, picname FROM ecards WHERE (uid = '".$pic."')";
$result = mysql_query($query, $connection);
$data = mysql_fetch_object($result);
$uri = "./galleries/".$size."/".$data->gallery."/".$data->picname;
} else {
header("Content-Type: text/plain");
die("Wrong parameter: type");
}
if(@fopen($uri, "r") === false)
{
header("Content-Type: image/png");
errImg("notfound");
exit();
}
$dimensions = @getimagesize($uri);
switch($dimensions[2])
{
case 1:
if(imagetypes() & IMG_GIF)
{
$oim = imagecreatefromgif($uri);
} else {
header("Content-Type: image/png");
errImg("type");
exit();
}
break;
case 2:
if(imagetypes() & IMG_JPG)
{
$oim = imagecreatefromjpeg($uri);
} else {
header("Content-Type: image/png");
errImg("type");
exit();
}
break;
case 3:
if(imagetypes() & IMG_PNG)
{
$oim = imagecreatefrompng($uri);
} else {
header("Content-Type: image/png");
errImg("type");
exit();
}
break;
default:
header("Content-Type: image/png");
errImg("type");
exit();
}
$ox = $dimensions[0];
$oy = $dimensions[1];
if($size == "thumb")
{
$im = imagecreate(100, 76);
imagecopyresampled($im, $oim, 0, 0, 0, 0, 100, 76, $ox, $oy);
} else {
$im = imagecreate($ox / $reductor, $oy / $reductor);
imagecopyresampled($im, $oim, 0, 0, 0, 0, $ox / $reductor, $oy / $reductor, $ox, $oy);
}
imagepng($im);
imagedestroy($im);
?>
Ich wäre sehr dankbar wenn mir jemand einen Tipp geben könnte, um diesem Problem aus den Füssen zu gehen.
MfG
Cyrille.
ich habe auf meiner Homepage einen Skript, der mir automatisch eine Bildergallerie erstellen kann, und bei dem man auch die Möglichkeit hat, Bilder als eCards zu versenden.
Bislang lief alles glatt auf dem Server, bis zu dem Tag als mein Homepage-Provider sein Server geupdated hat, und eine neuere Version von PHP und Co. installiert hat.
Mein Skript geht zwar immer noch, doch das ist nun das grosse Problem:
Die Bilder werden mit 256 Farben angezeigt, was dazu führt dass die Qualität der Bilder miserabel ist. Nach Angaben meines Providers muss ich eine Funktion ändern, die bei mir mit GD 1.6. anstatt mit GD 2.0. .
Da ich aber jetzt nicht weiss wie ich das ändern soll (weil ich nicht weiss WAS ich genau ändern soll), wollt ich fragen ob jemand eine Lösung für dieses Problem hätte...
Die Datei MAKEIMG.PHP , die die Bilder generiert, habe ich hier unten kopiert:
<?php
header("Cache-Control: public");
function errImg($errtype)
{
global $size;
$im = imagecreate(100, 76);
if($size == "thumb")
{
$bgc = imagecolorallocate($im, 107, 105, 239);
} else {
$bgc = imagecolorallocate($im, 255, 255, 255);
}
$tc = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 100, 76, $bgc);
if($errtype == "type")
{
imagestring($im, 3, 1, 5, "PICTURE FORMAT", $tc);
imagestring($im, 3, 3, 20, "NOT SUPPORTED", $tc);
} else if($errtype == "notfound") {
imagestring($im, 3, 22, 5, "PICTURE", $tc);
imagestring($im, 3, 16, 20, "NOT FOUND", $tc);
}
imagepng($im);
imagedestroy($im);
}
if($reductor < 0.5 && $size != "thumb")
{
header("HTTP/1.0 403 Forbidden");
exit();
}
if($type == "coords")
{
header("Content-Type: image/png");
$uri = "./galleries/".$size."/".$gallery."/".$pic;
} else if ($type == "id") {
header("Content-Type: image/png");
include "./include/config.inc.php";
include "./include/mysql.inc.php";
$query = "SELECT gallery, picname FROM ecards WHERE (uid = '".$pic."')";
$result = mysql_query($query, $connection);
$data = mysql_fetch_object($result);
$uri = "./galleries/".$size."/".$data->gallery."/".$data->picname;
} else {
header("Content-Type: text/plain");
die("Wrong parameter: type");
}
if(@fopen($uri, "r") === false)
{
header("Content-Type: image/png");
errImg("notfound");
exit();
}
$dimensions = @getimagesize($uri);
switch($dimensions[2])
{
case 1:
if(imagetypes() & IMG_GIF)
{
$oim = imagecreatefromgif($uri);
} else {
header("Content-Type: image/png");
errImg("type");
exit();
}
break;
case 2:
if(imagetypes() & IMG_JPG)
{
$oim = imagecreatefromjpeg($uri);
} else {
header("Content-Type: image/png");
errImg("type");
exit();
}
break;
case 3:
if(imagetypes() & IMG_PNG)
{
$oim = imagecreatefrompng($uri);
} else {
header("Content-Type: image/png");
errImg("type");
exit();
}
break;
default:
header("Content-Type: image/png");
errImg("type");
exit();
}
$ox = $dimensions[0];
$oy = $dimensions[1];
if($size == "thumb")
{
$im = imagecreate(100, 76);
imagecopyresampled($im, $oim, 0, 0, 0, 0, 100, 76, $ox, $oy);
} else {
$im = imagecreate($ox / $reductor, $oy / $reductor);
imagecopyresampled($im, $oim, 0, 0, 0, 0, $ox / $reductor, $oy / $reductor, $ox, $oy);
}
imagepng($im);
imagedestroy($im);
?>
Ich wäre sehr dankbar wenn mir jemand einen Tipp geben könnte, um diesem Problem aus den Füssen zu gehen.
MfG
Cyrille.
Kommentar