[PHP] Afwijkende kleur geresizde plaatjes

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heel vreemd probleem. Misschien zie ik gewoon de logica niet want ik heb nog geen koffie gehad. Maar goed:

Afbeeldingslocatie: http://www.poppetje.org/gek.jpg

Merk op het kleurverschil tussen het bovenste plaatje en het onderste. De oranje border wordt gegenereert door mijn script. Wanneer iemand een resolutie heeft afwijkend van de mijne )1600x1200), dan wordt het originele plaatje gekopieerd, geresized en in een temp directory geplaast waarna er een style wordt gegenereerd die refereert aan het temp plaatje, als de resolutie niet afwijkt dan wordt er gelinked naar het originele plaatje. Het resizen gebeurt uiteraard dmv GD. Nu komt het rare, het bovenste plaatje wat je hier ziet is het origineel, het onderste is een resize gedaan voor 1024x768. Wat ik niet begrijp is hoe het originele plaatje waarnaar wordt gelinked een afwijkende kleur heeft, terwijl de onderste wel goed is terwijl die is aangepast met GD. Ik dacht eerst dat misschien de widt/height van de td style niet klopte in verhouding met de background image maar die klopt maar de style klopt precies met de dimensies van de plaatjes.

Hoe kan dit?

Edit: Ik twijfelde eraan of dit in P&S of het grafische forum moet uit Devschuur maar dit lijkt me een php issie aangezien de graphics in PS gewoon kloppen...

[ Voor 7% gewijzigd door Verwijderd op 04-03-2004 11:22 ]


Acties:
  • 0 Henk 'm!

  • BHR
  • Registratie: Februari 2002
  • Laatst online: 17-09 21:58

BHR

Hoe maak je het nieuwe plaatje (imagecreate of imagecreatetruecolor of ..)?

No amount of key presses will shut off the Random Bug Generator


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
imagetruecolor maar......het nieuwe plaatje klopt, het is het originele plaatje wat niet klopt :?

Acties:
  • 0 Henk 'm!

  • BHR
  • Registratie: Februari 2002
  • Laatst online: 17-09 21:58

BHR

wat.. wat apart..

Wat voor functies voer je allemaal uit op het plaatje?

No amount of key presses will shut off the Random Bug Generator


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wat voor functies?

Deze roept de resize functie aan

PHP:
1
$BgImg = ResImg($value . ".png", $ImgDir, $ImgTempDir, $CurRes, $MaxRes, $ImgUrl, $ImgTempUrl);


De resize functie:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function ResImg($ImgIn, $ImgDir, $TempDir, $CurRes, $MaxRes, $ImgUrl, $ImgTempUrl){
    $Tmp = $ImgDir . $ImgIn;
    $Img = imagecreatefrompng($Tmp);
    list($width, $height, $type, $attr) = getimagesize($Tmp); // Bepaal de grootte van de bewaarde image
    if ($CurRes != $MaxRes){ // Is resolutie aanpassing nodig?
        $RndFName = "b" . (rand(90000, 99000)) . ".png"; // Random filename
        $perc = ($CurRes/(1600/100));
        $nwidth = (($width/100) * $perc);
        $nheight = (($height/100) * $perc);
        //$nwidth = round((($width/100) * $perc));
        //$nheight = round((($height/100) * $perc));
        $NewImg = ImageCreate($nwidth, $nheight);
        imagecopyresized ( $NewImg, $Img, 0, 0, 0, 0, $nwidth +1, $nheight +1, $width, $height);
        ImagePng($NewImg, $TempDir . $RndFName);
        $Tmp = $ImgTempUrl . $RndFName;
        $ResSet = "t";
    }
    else{
        $ResSet = "f";
        $nwidth = $width;
        $nheight = $height;
        $RndFName = $ImgIn;
        $Tmp = $ImgUrl . $RndFName;
    }
    // Terugsturen van de benodigde data
    $RetVal = array();
    $RetVal['name'] = $Tmp;
    $RetVal['width'] = $nwidth;
    $RetVal['height'] = $nheight;
    $RetVal['resset'] = $ResSet;
    return $RetVal;
}


Dus wanneer de resolutie van de bezoeker gelijk is aan de maxres (door mij bepaald op 1600x1200 omdat ik daarmee werk). Wordt er geen nieuwe image gemaakt maar wordt een array teruggeven met de dimensies van de originele image en locatie/naam. Daarna doe ik dit:

PHP:
1
2
3
$TableRet[$value]['style'][] = "width: " . $BgImg['width']. "px;\n";
$TableRet[$value]['style'][] = "height: " . $BgImg['height'] . "px;\n";
$TableRet[$value]['style'][] = "background-image: url(" . $BgImg['name'] . ");\n";


Wat dus de style definitie maakt voor iedere td cell.

Ergens ga ik de mist in maar ik zie het niet....

Acties:
  • 0 Henk 'm!

  • BHR
  • Registratie: Februari 2002
  • Laatst online: 17-09 21:58

BHR

Op regel 12 gebruik je imagecreate ipv imagecreatetruecolor.

imagecreate ondersteunt minder kleuren dan imagecreatetruecolor. Ik vermoed dat daarom bepaalde, op elkaar lijkende kleuren als 1 kleur worden opgeslagen.

Probeer eens imagecreatetruecolor te gebruiken..

No amount of key presses will shut off the Random Bug Generator


Acties:
  • 0 Henk 'm!

  • benoni
  • Registratie: November 2003
  • Niet online
Misschien had het originele plaatje een Colorsync profiel, en raak je dat kwijt als je het door de resize functie haalt...

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 04 maart 2004 @ 11:21:
...Het resizen gebeurt uiteraard dmv GD...
offtopic:
Zo logisch is het niet om GD te gebruiken. ImageMagick (commandline tool) wordt door de meeste hosts ook ondersteund en werkt veel sneller dan GD.

[ Voor 4% gewijzigd door NMe op 04-03-2004 11:47 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • BHR
  • Registratie: Februari 2002
  • Laatst online: 17-09 21:58

BHR

Zie ook http:///www.php.net/imagecopyresized
Note: There is a problem due to palette image limitations (255+1 colors). Resampling or filtering an image commonly needs more colors than 255, a kind of approximation is used to calculate the new resampled pixel and its color. With a palette image we try to allocate a new color, if that failed, we choose the closest (in theory) computed color. This is not always the closest visual color. That may produce a weird result, like blank (or visually blank) images. To skip this problem, please use a truecolor image as a destination image, such as one created by imagecreatetruecolor().

No amount of key presses will shut off the Random Bug Generator


Acties:
  • 0 Henk 'm!

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 20:45

RM-rf

1 2 3 4 5 7 6 8 9

het ziet eruit alsof je jpeg gebruikt, dat is gewoonweg niet kleursafe, de compressiemethoden beperkt de helderheidswaardes per kleurlaag (voor web meestal RGB) en dit leidt altijd tot kleurveranderingen, juist ook opvallend bij bij egale kleuren.

PNG-8 en GIF hebben wel een paletgebaseerd kleurbereik en zijn op die manier kleursafe.

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


Acties:
  • 0 Henk 'm!

  • BHR
  • Registratie: Februari 2002
  • Laatst online: 17-09 21:58

BHR

RM-rf schreef op 04 maart 2004 @ 11:50:
het ziet eruit alsof je jpeg gebruikt...
Ziet script (regel 3). Dat lijkt me niet het issue..

[ Voor 60% gewijzigd door BHR op 04-03-2004 11:55 ]

No amount of key presses will shut off the Random Bug Generator


Acties:
  • 0 Henk 'm!

  • nemesis_
  • Registratie: Mei 2003
  • Laatst online: 15-05-2024

nemesis_

I'm your enemy!

misschien doordat je imagecopyresized gebruikt (pixel-resize) wordt de kleur ook wel veranderd
probeer het eens met imagecopyresampled

Ook een cookie?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wauw ga je even koffie halen zijn er zes nieuwe reacties.....

Even voor de duidelijkheid. De afwijkende kleur gebeurt alleen met het originele plaatje. De resizes kloppen allemaal wel. Ik realiseer me dat de topic titel misleidend is maar ik kan hem helaas niet zelf veranderen (toch?).

Dus: Ik heb een origineel plaatje (PNG overigens), dit plaatje klopt kleurtechnisch precies als ik het in PS bekijk. Wanneer iemand met resolutie 1600x1200 bezoekt dan wordt er gelinked naar het originele plaatje wat dan kleurtechnisch niet meer klopt. Als iemand met een afwijkende resolutie bezoekt dan wordt er een kopy gemaakt van het originele plaatje, het script linked naar deze kopie en dan klopt de kleur wel. Sorry voor de bold maar dat het even duidelijk is dat het probleem niet ligt met de door gd bewerkte plaatjes :)

Acties:
  • 0 Henk 'm!

  • Boogie
  • Registratie: Januari 2001
  • Laatst online: 06-11-2024
Je hebt het over origineel, maar daar zet je toch ook zelf die oranje border in? Die is dus ook aangepast, en blijkbaar wordt de fout die daar ontstaat door een kleurenbeperking tijdens het resizen weer ongedaan gemaakt.
Probeer eens het orgineel te resizen naar het orginele formaat, is hij dan weer goed?

Acties:
  • 0 Henk 'm!

  • BHR
  • Registratie: Februari 2002
  • Laatst online: 17-09 21:58

BHR

-- In mijn eerdere reply probeerde ik een reden aan te geven waarom dit zou kunnen voorkomen --

Wanneer een bezoeker een plaatje ophaalt, link je dat statisch ([img]"http://host/plaatjeN.jpg"/>)[/img])?
[ Misschien dat een dynamisch plaatje voor de andere uitvoer zorgt ]

Als je, nadat het resizescript een keer gedraait heeft, het orgineel bekijkt, dan heeft dat plaatje andere kleuren gekregen!? Of gebeurd dit ook al als het resize script helemaal niet gebruikt wordt?

No amount of key presses will shut off the Random Bug Generator


Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 20:48
Misschien zie je het fout, en gaat het toch mis bij de geresizede plaatjes. Wat als de _achtergrondkleur_ nou ook niet klopt, en de geresizede plaatjes dezelfde fout maken? Dan lijken de geresizede plaatjes goed, en het origineel lijkt fout.

Maak eens een screenshot van je browser, en meet in photoshop de achtergrond kleur even. Is deze hetzelfde als oorspronkelijk de bedoeling was?

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Boogie: Je hebt het over origineel, maar daar zet je toch ook zelf die oranje border in? Die is dus ook aangepast, en blijkbaar wordt de fout die daar ontstaat door een kleurenbeperking tijdens het resizen weer ongedaan gemaakt.
Nope, de oranjeborders zijn de plaatjes:

Afbeeldingslocatie: http://www.poppetje.org/stick5-a.png

Dit plaatje is het orgineel. Wanneer iemand met resolutie 1600x1200 bezoekt, dan wordt er statisch gelinked naar dit plaatje. Dit is de kleurwaarde als ik check in PS: #CCCC9A. Ik heb de output gechecked en de link wordt inderdaad goed gedaan, in mijn td tag staat netjes:

background-image: url(img/stick5-c.png);

Dit image wordt niet gewijzigd, dat heb ik gechecked, het wordt niet per ongeluk overschreven door een nieuwe versie ofzo.
BHR: Wanneer een bezoeker een plaatje ophaalt, link je dat statisch
Zie boven, statisch.
Misschien zie je het fout, en gaat het toch mis bij de geresizede plaatjes. Wat als de _achtergrondkleur_ nou ook niet klopt, en de geresizede plaatjes dezelfde fout maken? Dan lijken de geresizede plaatjes goed, en het origineel lijkt fout.

Maak eens een screenshot van je browser, en meet in photoshop de achtergrond kleur even. Is deze hetzelfde als oorspronkelijk de bedoeling was?
Kleur code orgineel: #CCCC9A
Kleur code rezized plaatje: #CCCC9A
Kleur code van een screenshot uit de browser van het origineel: #C6C690
Background kleur in body tag: CCCC9A

Schiet mij maar lek :?

edit:

De style wanneer het origineel wordt gebruikt. Zoals jullie zien wordt er daadwerkelijk gelinked naar het orginele plaatje wat dus onveranderd op mijn harde disk staat.

code:
1
2
3
4
5
6
7
8
td.stick5-b{
margin: 0px;
border-width: 0px;
padding: 0px;
width: 23px;
background-image: url(img/stick5-b.png);
background-repeat: repeat-x
}

[ Voor 12% gewijzigd door Verwijderd op 04-03-2004 13:53 ]


Acties:
  • 0 Henk 'm!

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 20:45

RM-rf

1 2 3 4 5 7 6 8 9

het kan mogelijk komen door PNG gamma correction:
zie http://www.hut.fi/~hsivonen/png-gamma.html

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RM-rf schreef op 04 maart 2004 @ 13:58:
het kan mogelijk komen door PNG gamma correction:
zie http://www.hut.fi/~hsivonen/png-gamma.html
Dat is een interessant verhaal wat ik nog niet kende en ik neig erna alsnog jpg's te gaan gebruiken. Wat ik me alleen nog wel afvraag is hoe het kan dat een browser twee verschillende plaatjes met exact dezelfde kleurcode (check in PS), verschillend laat zien. Dat is het vreemde, de ene blend netjes in de background kleur en de andere niet.

Acties:
  • 0 Henk 'm!

Verwijderd

RM-rf schreef op 04 maart 2004 @ 11:50:
het ziet eruit alsof je jpeg gebruikt, dat is gewoonweg niet kleursafe, de compressiemethoden beperkt de helderheidswaardes per kleurlaag (voor web meestal RGB) en dit leidt altijd tot kleurveranderingen, juist ook opvallend bij bij egale kleuren.
Dit is wel degelijk correct, JPEG is er slecht met ongeveer alle kleurlagen - en maakt het over het algemeen maar een enorm zooitje van.

Waarom dit is weet ik niet, maar ik weet WEL dat als je het orgineel om zou zetten naar een GIF dat beide kleuren dan gelijk zouden moeten zijn.

[ Voor 198% gewijzigd door Verwijderd op 04-03-2004 15:42 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voor de duidelijkheid: Zowel het origineel als de resize zijn PNG.

Maar goed, de werkomheen die ik nu gebruik is eerst alle originele plaatjes door mijn script heen te duwen en ze opnieuw weg laten schrijven met de originele maten. Deze nieuwe 'originelen' zet ik in plaats van de oude originelen en voila, goed uitziende, kleurechte borders op iedere resolutie. De hamvraag is dan, kan het zijn dat GD kleurechtere png's wegschrijft dan Photoshop.

Maar goed, het werkt nu met een omweg en ik ben een happy camper :)
Pagina: 1