[PHP] resizen foto's nu 8bit ipv 24bit kleuren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • capedro
  • Registratie: Oktober 2000
  • Laatst online: 25-07 18:11
Alloa,

Ik ben hard bezig met een website met circa 45.000 foto's (resolutie die ook gebruikt wordt bij het ANP)... nu heb ik een php-script geschreven welke thumbnails er van genereerd en cacht... dit alles is getest en werkte correct....

Nu heb ik alles geinstalleerd op een Sun Raq Cobalt 550 :9~ die uiteindelijk dedicated ergens dicht bij de AMS-IX komt te hangen... alle voorziene problemen heb ik weten op te lossen... behalve de volgende:

Als ik de foto's resize worden ze omgezet naar (ik vermoed) 8bit kleuren ipv 24bit.... rara kanariepiet... het bedrijf waarvan we de Cobalt huren wist het ook niet.... persoonlijk vermoedt ik iets met deGD functionaliteit en wat libraries die er aan horen te hangen....

maar ik kan het euvel niet vinden |:(

Wie weet de oplossing (momenteel maken we gebruik van PHP versie 4.0.6 op de cobalt en 4.0.4pl1 op mijn testserver)... een upgrade naar versie 4.2.2 is idd een optie maar niet op dit moment, want dan moet ik een deel van de code gaan herzien... maar dat komt later wel O-)

Ik wacht het rustig af... of jullie wat weten... maar bijvoorbaat dank voor meedenken B)

My weblog


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14:20
Heb je d'r voorbeeldcode bij? (Teruggebracht tot het absolute minimum waarbij de fout optreedt, natuurlijk). Dan kunnen we misschien wel wat zinnigs erover zeggen.

edit:
Relevante informatie zoals je versie van PHP en GD (quote uit phpinfo graag) is natuurlijk een vereiste.

Wat voor server je 't op draait kan me niet schelen. :p

edit:
Wat betekent dat getalletje hieronder toch?

[ Voor 158% gewijzigd door Soultaker op 22-11-2002 23:42 ]


Acties:
  • 0 Henk 'm!

Verwijderd

je hebt waarschijnlijk een GDlib die geen truecolor ondersteunt. Nieuwere versies van GD kunnen wel truecolor, en dan heb je wel mooiere plaatjes.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14:20
Oh trouwens - ik kan me heel goed voorstellen dat je je thumbnails op 256 kleuren wilt hebben, ivm betere compressie. Je ziet het op dat formaat doorgaans toch niet.

Acties:
  • 0 Henk 'm!

  • capedro
  • Registratie: Oktober 2000
  • Laatst online: 25-07 18:11
als ik die server voorhanden zou hebben hier... dan had ik het meteen gepost... maar die server staat nu weer even in de doos te wachten bij mijn schoonpa...

maar goed... hier alvast de voorbeeldcode:

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
33
34
35
36
37
38
39
40
41
if (!isset($big)) {
 $maxsize = 192;
 $teksttype = 3;
 $typepicture = "small";
} else {
 $maxsize = 320;
 $teksttype = 5;
 $typepicture = "big";
}
$plaatje=$imagefile;
$imagefile = "/sites/vanvossen/private/photos/".$plaatje;
$cachefile = "/sites/vanvossen/private/cache/".$typepicture."-".$plaatje;
if (!is_file($imagefile)) {
  $imagefile = "/sites/vanvossen/private/dev/no_file.jpg";
  $cachefile = "/sites/vanvossen/private/cache/".$typepicture."no_file.jpg";
}



if (!is_file($cachefile)) {
  $src_img = imagecreatefromjpeg($imagefile);
  if( (imagesx($src_img)) > (imagesy($src_img)) ) {
    $ratiochange = imagesx($src_img) / $maxsize;
  } else {
    $ratiochange = imagesy($src_img) / $maxsize;
  }
  $new_w = imagesx($src_img)/$ratiochange;
  $new_h = imagesy($src_img)/$ratiochange;
  $dst_img = imagecreate($new_w,$new_h);
  $newimage= $cachefile;
  imagecopyresized($dst_img,$src_img,0,0,0,0,$new_w,$new_h,imagesx($src_img),imagesy($src_img));
  imagejpeg($dst_img,$newimage);

}
Header ("Content-type: image/jpeg");
$im_tmp = imageCreate( $new_w, $new_h );
$im = imagecreatefromjpeg($cachefile);
ImageString ( $im, $teksttype, 15 ,5, $tekst, $KleurTekst);
ImageString ( $im, 1, 15 , ($new_h - 15), $tekst2, $KleurTekst);
Imagejpeg($im,'',100);
ImageDestroy($im);


Morgen ben ik weer bij mijn schoonpa en zal dan ff de phpinfo copieren en on-line zetten ;) dan horen jullie meer :O (phpinfo @ testserver)

My weblog


Acties:
  • 0 Henk 'm!

  • Skinkie
  • Registratie: Juni 2001
  • Laatst online: 09-06-2020

Skinkie

Op naar de 500

het is zeker weten een oude GD

* Skinkie had het zelfde probleem

optie 1: installeer nieuwe GD voordeel true color nadeel geen gif
optie 2: patch nieuwe GD, installeer nieuwe GD, voordeel true color en gif support, nadelen zijn die er dan :+

ik ging voor optie 2 :)

Steun Elkaar, Kopieer Nederlands Waar!


Acties:
  • 0 Henk 'm!

  • Willem2
  • Registratie: Oktober 2000
  • Laatst online: 05-09 07:32

Willem2

Ω is futile

welk image is volgens jou 8-bits?

imagejpeg($dst_img,$newimage);

of

Imagejpeg($im,'',100); (met text)?


ik vermoed namelijk dat het alleen de laatste is...

en nee, ik houd niet van voetbal... :)


Acties:
  • 0 Henk 'm!

  • capedro
  • Registratie: Oktober 2000
  • Laatst online: 25-07 18:11
de imagejpeg($dst_img,$newimage); genereerd imho een 8bits image

[b]image($im,'',100);[b] -> leest weer die eerste uit de cache en is dus ook 8bits

ik zal ook eens kijken of het verwijderen van ImageString positieve effecten kan hebben;)

My weblog


Acties:
  • 0 Henk 'm!

  • capedro
  • Registratie: Oktober 2000
  • Laatst online: 25-07 18:11
Ik heb de oplossing gevonden... het had niets te maken met versies van het één of ander....

[PHP] GD lib. image quality!

Het heeft wel wat kopzorgen gekost... maar de site kan on-line :Y)

quote van het bericht:
imageCreate will create an image, but its palette will be very limited, so
when you try to copy your photo onto it, it will maintain the palette of the
original picture. Obviously, this is not what you want, since the picture
comes out looking all grey and faded (probably 8-16 colors!).

What works for me is creating a blank image using imageCreate(), then saving
it as a temporary jpeg (using imageJpeg). This action will set the palette
of the image to a jpeg's palette (close to 16-bit or better colorspace). If
you imageCopyResized over this temp.jpg (which you need to create whenever
you run the script to ensure sizing is perfect), it will come out with the
full palette of colors.

Pseudo code:
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
<?
$dest_h = whatever your calculated destination height is;
$dest_w = whatever your calculated destination width is;

$src_h = height of original image;
$src_w = width of original image;

   // create the blank limited-palette image
$base_image = imageCreate($dest_w, $dest_h);

   // convert and save it to temp.jpg
imagejpeg($base_image, 'path/to/temp.jpg');

   // get the image pointer to the temp jpeg
$image = imageCreateFromJpeg('path/to/temp.jpg');

   // get the image pointer to the original image
$imageToResize = imageCreateFromJpeg('path/to/image_to_be_resized.jpg');

   // resize the original image over temp.jpg
   // since you have GD2, you could also use imageCopyResampled
imageCopyResized($image, $imageToResize, 0, 0, 0, 0, $dest_w, $dest_h,
$src_w, $src_h);

   // values for output jpeg quality
$jpegQuality = 75;

   // create the resized image
imageJpeg($image, 'path/to/thumbnail_name.jpg', $jpegQuality);
?>


Then all you have to do is a little cleanup with imageDestroy() and you
should have a nice looking thumbnail!


I usually add a line like this to the script to make sure everything went
smoothly:
PHP:
1
2
3
4
5
    <?
    echo '<html><head><title>Thumbnail Generator</title>'
        .'</head><body>[img]"path/to/thumbnail_name.jpg">'
    [/img]</html>';
    ?>

It lets me see the quality of the thumbnail the second the script completes.


Try it - you'll get perfect thumbnails every time. I used this technique
for all of the pictures at www.arkestraclandestina.com with GD1.6 - and all
of them actually had custom color profiles! Works like a charm.

I like this method because I can be sure that the script won't break on
sites with older PHP and GD versions - which is an important consideration
when you're deploying applications to other sites...

However! If you are sure it will only be run on a PHP4, GD2 system, you can
avoid all of the temp jpg madness altogether by just altering your code to
use imageCreateTrueColor() instead of imageCreate()!! ;P Easy as pie!

Dave

My weblog

Pagina: 1