Avatar billede gedekid Nybegynder
30. juli 2008 - 16:54 Der er 9 kommentarer og
1 løsning

Gdlib og farveprofil

Hej eksperter,

har lige et spørgsmål vedr. GDlib!

Jeg sidder med et værktøj til fugefarver hvor man har en murstenstavle man så kan tjekke fugefarver på.

På selve tavlen er fugen klippet væk og istedet bliver der så lagt en hel flade bagpå.

Billedet bliver generet udfra 2 png'er.. selve tavlen og så farven og bliver der efter samlet i en jpg.

MEN - der er som om at farveprofilen ryger. png'en er gemt i sRGB, men jpg'en har ikke denne.. og farven er en smule forkert.

Så mit spørgsmål er så: Er det gdlib der smider farveprofilen væk og kan den i så fald beholde den? Eller er det PHP scriptet der er vrøvl med?


--- KODE ---

          if (file_exists("/www/randerstegl.dk/web/fugefarver/GFXSharedProdThumbs/".$theTile.".png")) {
                        $webroot = "/www/randerstegl.dk/web";
                        $webpath = "/fugefarver/GFXSharedGeneratedProdThumbs/".$theTile."-".$theMortarColour.$theFilenameSuffix.".jpg";
                        $theDestinationDirectory                                = $webroot."/fugefarver/GFXSharedGeneratedProdThumbs/";
                        $theDestinationImageFilename                = $theDestinationDirectory.$theTile."-".$theMortarColour.$theFilenameSuffix.".jpg";
                        $theMortarColourFilename                                        = "/www/randerstegl.dk/web/fugefarver/GFXSharedMortars/fuge".$theMortarColour.".png";
                        $theTileFilename                                                        = "/www/randerstegl.dk/web/fugefarver/GFXSharedProdThumbs/".$theTile.".png";

                        $theImageData = getImageSize($theTileFilename);

                        $theSourceImagesXSize        = $theImageData[0];
                        $theSourceImagesYSize        = $theImageData[1];

                        if (!file_exists($theDestinationImageFilename)) {

                                $theBackgroundImage        = imagecreatefrompng($theMortarColourFilename);
                                $theTileImage                                = imagecreatefrompng($theTileFilename);

                                imagecopy($theBackgroundImage,$theTileImage,0,0,0,0,$theSourceImagesXSize,$theSourceImagesYSize);

                                $theDestinationImage = imagecreatetruecolor($theOutputXSize,$theOutputYSize);

                                imagecopyresampled($theDestinationImage,$theBackgroundImage,0,0,0,0,$theOutputXSize,$theOutputYSize,$theSourceImagesXSize,$theSourceImagesYSize);

                                imagejpeg($theDestinationImage,$theDestinationImageFilename,$theOutputQuality);

                                imagedestroy($theBackgroundImage);
                                imagedestroy($theTileImage);
                                imagedestroy($theDestinationImage);

                        }

                        return $webpath;

                } else {

                        return FALSE;

                }
Avatar billede jakobdo Ekspert
30. juli 2008 - 17:37 #1
Jeg ville jo nok lave det som følger:

Opret et img resource med imagecreatetruecolor()
Kopier baggrunden over.
Kopier murstenene over.
Gem hele skidtet som et jpg billede.
Avatar billede gedekid Nybegynder
30. juli 2008 - 17:45 #2
Og så skulle der ikke være nogle problemer ?
Avatar billede jakobdo Ekspert
30. juli 2008 - 17:56 #3
Ingen ide...
Men hvis du giver mig direkte link til 2 af dine billeder, skal jeg da gerne gøre forsøget.
Avatar billede jakobdo Ekspert
31. juli 2008 - 14:26 #5
Dette virker hos mig:

<?php
//http://www.eksperten.dk/spm/839919

$mursten = 'http://www.randerstegl.dk/fugefarver/GFXSharedProdThumbs/RT201.png';
$fuge = 'http://www.randerstegl.dk/fugefarver/GFXSharedMortars/fugeGraahvid.png';

$mursten_img = imagecreatefrompng($mursten);
$fuge_img = imagecreatefrompng($fuge);

$width = imagesx($mursten_img);
$height  = imagesy($mursten_img);

$new_img = imagecreatetruecolor($width,$height);

imagecopy($new_img, $fuge_img, 0, 0, 0, 0, $width, $height);
imagecopy($new_img, $mursten_img, 0, 0, 0, 0, $width, $height);

header('Content-Type: image/png');
imagepng($new_img);
imagedestroy($new_img);
imagedestroy($mursten_img);
imagedestroy($fuge_img);

?>
Avatar billede jakobdo Ekspert
31. juli 2008 - 14:27 #6
Og det virker også som jpeg:

header('Content-Type: image/jpeg'); <---
imagejpeg($new_img); <---
Avatar billede gedekid Nybegynder
31. juli 2008 - 15:20 #7
Mange tak for hjælpen!

Men har erfaret at problemstillingen skyldes noget helt andet, nemlig at de forskellige browsere ikke gør brug af ICC profilen der er med... Så kan man undre sig over at verdens mest benyttede browser ikke benytter sig af så vigtig en feature.

Men Microsoft mener nok ikke at korrekt visning af farver har den store betydning.

Men læg et svar, så får du ihvertfald pointene for ulejligheden ...
Avatar billede gedekid Nybegynder
31. juli 2008 - 15:24 #8
Safari gør det fint, skal jeg lige nævne..
Avatar billede jakobdo Ekspert
01. august 2008 - 18:07 #9
Svar!
Avatar billede jakobdo Ekspert
04. august 2008 - 11:02 #10
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester