[PHP] Resize JPEG > Lelijkle kleuren

Pagina: 1
Acties:

  • ilovetechno
  • Registratie: Oktober 2001
  • Laatst online: 17-04 12:49
Ik ben een leek wat PHP betreft en heb het volgende scriptje ergens vandaan getoverd.
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
<?
$new_w = 100;
$cfg_fullsizepics_path = "main";
$cfg_thumb_path = "thumb";
$filepath = "main";
$dir = dir($filepath); 
while($entry=$dir->read()) { 
    if($entry == "." || $entry == "..") { 
        continue; 
    } 
    $fp = @fopen("$filepath/$entry","r");
 $photo_filename = "$entry";
$image_stats = GetImageSize($cfg_fullsizepics_path."/".$entry);
$imagewidth = $image_stats[0];
$imageheight = $image_stats[1];
$img_type = $image_stats[2];
$ratio = ($imagewidth / $new_w);
$new_h = round($imageheight / $ratio);
if (!file_exists($cfg_thumb_path."/".$entry))  {
 if ($img_type=="2") {
 $src_img = imagecreatefromjpeg($cfg_fullsizepics_path."/".$entry);
 $dst_img = imagecreate($new_w,$new_h);
imagecopyresized($dst_img,$src_img,0,0,0,0,$new_w,$new_h,imagesx($src_img),imagesy($src_img));
imagejpeg($dst_img, "$cfg_thumb_path"."/$entry");
 } elseif  ($img_type=="3") {
 $dst_img=ImageCreate($new_w,$new_h);
 $src_img=ImageCreateFrompng($cfg_fullsizepics_path."/".$entry);
ImageCopyResized($dst_img,$src_img,0,0,0,0,$new_w,$new_h,ImageSX($src_img),ImageSY($src_img));
 Imagepng($dst_img, "$cfg_thumb_path"."/$entry");
 } elseif  ($img_type=="1") {
 $cfg_thumb_url=$cfg_fullsizepics_url;
 }
}
  echo "$entry";
  echo "
";
  }
?> 

Nu heb ik alleen het probleem dat de kleuren heel vaag worden van de foto's... wie weet hoe dat komt??

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

imagecopyresized pakt gewoon wat puntjes en plakt die bij elkaar
in de php manual vindt je nog een paar imagecopy* methoden, als je en modern genoege GD-library hebt kan je de resampled versie gebruiken.

Verwijderd

je maakt gebruik van ImageCreate() en ImageCopyResized. Maak s gebruik van ImageCreateTrueColor() en ImageCopyResampled() ipv ImageCopyResized(). Dan is dat 'vieze' er wel vanaf.

Welke GD versie gebruik je eigenlijk?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 07:40
Dit komt waarschijnlijk door het algoritme dat door ImageCopyResized wordt gebruikt (welke precies, zou ik niet weten). Probeer eens ImageCopyResampled.

Resizen van/naar hele kleine plaatjes gaat sowieso niet zo goed.

edit:
Traditiegetrouw is iedereen me weer voor. ;) DarthRaider's suggestie, om een true color image te gebruiken, lijkt me ook belangrijk voor de kwaliteit.

  • ilovetechno
  • Registratie: Oktober 2001
  • Laatst online: 17-04 12:49
Ik heb ImageCreate() en ImageCopyResized vervangen alleen nu geeft hij de fout:

Fatal error: Call to undefined function: imagecreatetruecolorfromjpeg() in c:\phpdev\www\public\arno\resize.php on line 21

Ik gebruik trouwens PHPdev van firepages.. Welke GD daarin zit wete ik niet

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

staat wel in de output van phpinfo()

als je niet versie 2.0+ hebt kan bovenstaande allemaal niet.

Verwijderd

ilovetechno schreef op 15 augustus 2002 @ 20:12:
Ik heb ImageCreate() en ImageCopyResized vervangen alleen nu geeft hij de fout:

Fatal error: Call to undefined function: imagecreatetruecolorfromjpeg() in c:\phpdev\www\public\arno\resize.php on line 21

Ik gebruik trouwens PHPdev van firepages.. Welke GD daarin zit wete ik niet
ImageCreateTrueColorFromJpeg bestaat niet :)
je moet ImageCreate() vervangen door ImageCreateTrueColor() :) (zie ook http://www.php.net/imagecreatetruecolor). Je $dst_img is namelijk de truecolor image.

Verwijderd

je moet in je php.ini even 'extension=php_gd.dll' vervangen door 'extension=php_gd2.dll'
vooropgesteld dat je php_gd2.dll in je extentions dirt hebt staan.
Dan heb beschikking over alle truecolor functies
Pagina: 1