Kłopociki są, i może kto pomoże... (IMG:
http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
W skrócie: Na stronie łobrazki mają się generować w locie z oryginału (pomniejszane) i dodatkowo mają nałożony watermark. Wynikowy obrazek wyświetlany jest poprzez:
Kod:
<?php
echo "<img src=\"uobrazek.php?srodek=$srodek_src\" alt=\"\" border=\"0\" /></a>"; ?>
gdzie 'srodek' to właśnie ten 'watermark' generowany z obrazka (pomniejszonego $srodek_src), natomiast tło jest stałe (z innego obrazka)
oto uobrazek.php:
<?php
header("Content-type: image/png"); include_once ('functions_graph.inc');
$tlo_src = "./produkty/images/puste_biale_kolko.png";
$srodek_src = $_GET['srodek']; // czytaj z argumentu linku
// zmniejsz fotosa do miniaturki
$resajz = ResizePNG($srodek_src);
// a tu scal miniaturke z tlem (produkty)
$merge = MergeProdPNG($tlo_src, $resajz);
// ... i wyswietl efekt:
?>
funkcje:
<?php
function ResizePNG($stary_png)
{
$stary = ImageCreateFromPNG($stary_png);
$colorTransparent = imagecolortransparent($stary);
$nowa_szerokosc = 100;
$nowa_wysokosc = 100;
// Otwieramy nowy obrazek i nadajemy mu tło
$nowy_png = ImageCreateTrueColor($nowa_szerokosc, $nowa_wysokosc);
imagefill($nowy_png, 0, 0, $colorTransparent);
imagecolortransparent($nowy_png, $colorTransparent);
ImageCopyResized($nowy_png, $stary, 0, 0, 0, 0, $nowa_szerokosc, $nowa_wysokosc, $rozmiar['0'], $rozmiar['1']);
// Pozbywamy się starego obrazka
ImageDestroy($stary);
return $nowy_png;
ImageDestroy($nowy_png);
}
?>
<?php
function MergeProdPNG($tlo_src, $srodek_src)
{
$srodek = $srodek_src; // wiem, że głupie - ale to popłuczyny z eksperymentów, nie smiać się :)
$srodek_width = imagesx($srodek);
$srodek_height = imagesy($srodek);
$obraz = imagecreatefrompng($tlo_src);
ImageAlphaBlending($obraz, true);
ImageCopyMerge($obraz, $srodek, 15, 30, 0, 0, $srodek_width, $srodek_height, 100);
return $obraz;
ImageDestroy($obraz);
ImageDestroy($srodek);
}
?>
<?php
function DisplayPNG($src)
{
header("Content-type: image/png"); //naglowek dla obrazka
ImagePNG($src);
// Zwalniamy zajętą pamięć
ImageDestroy($src);
}
?>
No i o co mnie chodzi...
Otóż to kurestwo działa pięknie pod Firefoxem, a natomiast pod exploderem nie chce. W sensie - zero błędów - tylko IE generalnie szcza na to, że ten złamany obrazek ma wyświetlić. Nawet gdy przedeklaruję wynikowy obrazek na np. gif czy jpg - IE ma mnie w rzyci (FF wyświetla) - czyli nie jestem przekonany, że to fabryczne ułomnosci IE w stosunku do formatu PNG - ale może ktoś mnie oświeci.. ?
Ręce mi opadają, gdzieś zapewne szczegół jakiś - ale może ktoś ze świeżym spojerzeniem wytknie mi prawdopodobne miejsca błędów...
help ! (IMG:
http://forum.php.pl/style_emoticons/default/smile.gif)