[PHP] Kwaliteit van foto's

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Ik ben nu bezig met een upload scriptje en wil de foto's verkleinen naar 500px breed. Ik ben niet tevreden over de kwaliteit. Flickr gebruikt ook 500px breedte en daar worden ze veel mooier weergeven.

Voorbeeld mijn scriptje:
Afbeeldingslocatie: http://img141.imageshack.us/img141/8205/bikephpkb2.jpg

Voorbeeld Flickr:
Afbeeldingslocatie: http://img141.imageshack.us/img141/6351/bikeflickroy5.jpg

Ik gebruik deze: thumbnail class en gebruik deze code om te uploaden:

code:
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
<?php
include('includes/classes/thumbnail.php');

$path = 'afbeeldingen/';
$image_width = 500;
$thumbnail_size = 100;


//-- form's been posted, size is bigger than 25kb, tmp file exists and it's a jpg, jpeg, png or gif file
if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_FILES['userfile']['size'] > 25 && is_uploaded_file($_FILES['userfile']['tmp_name']) && (strtolower(substr($_FILES['userfile']['name'], -3)) == 'jpg' || strtolower(substr($_FILES['userfile']['name'], -4)) == 'jpeg' || strtolower(substr($_FILES['userfile']['name'], -3)) == 'png' || strtolower(substr($_FILES['userfile']['name'], -3)) == 'gif'))
{
  $filename = date('Y-m-d') . '_' . $_SESSION['id'] . '_' . substr($_FILES['userfile']['name'], 0, 30);
    
  //--- upload image naar $path
  move_uploaded_file($_FILES['userfile']['tmp_name'], $path . $filename);

  //--- resize to max width
  $thumb=new thumbnail($path . $filename);            // generate image_file, set filename to resize
  //$thumb->size_width($thumbnail_size);                // set width for thumbnail, or
  //$thumb->size_height($thumbnail_size);                // set height for thumbnail, or
  $thumb->size_auto(500);                    // set the biggest width or height for thumbnail
  $thumb->jpeg_quality(100);
  $thumb->show();                        // show your thumbnail
  //$thumb->save("./huhu.jpg");                // save your thumbnail to file
}
else
{
  echo '<form method="post" action="' . $_SERVER['PHP_SELF'] . '" enctype="multipart/form-data">';
  echo '<p>';
  echo '<input type="file" name="userfile" value="" /><br />';
  echo '<input type="submit" name="submit" value="Upload\'n!" />';  
  echo '</p>';
  echo '</form>';
}
?>


Doe ik iets verkeerd? Deze class is slechts ter voorbeeld, heb het ook geprobeerd met een eigen script en nog ééntje die ik gedownload had, maar ook de kwaliteit daarvan is niet naar mijn standaarden :) :) Heeft iemand tips hoe dit wel aan te pakken? Want ik wil geen vervormde foto's op mijn website.

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Ik zou gewoon een andere class pakken. Deze doet niet aan resampling, wat je wel nodig hebt voor een mooiere afbeelding te genereren. Zoek maar eens naar "php + imagecreatefrom..'"

Zijn ook zat topics over te vinden op Got.
[php]resizen werkt lelijk
[PHP] Resizen plaatje is niet smooth.
[php] thumbnails genereren -> worden lelijk!!!!
[PHP] image resampling probleem
etc. etc.

[ Voor 35% gewijzigd door Noork op 11-07-2008 12:06 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Dat is een GD-class, ik denk dat GD2 betere kwaliteit zal outputten.

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op vrijdag 11 juli 2008 @ 12:05:
Dat is een GD-class, ik denk dat GD2 betere kwaliteit zal outputten.
Neen, met GD kun je ook mooie afbeeldingen genereren.
Het verschil zit hem in het gebruik van imagecreate vs. imagecreatetruecolor

vv idd Crisp, die bedoelde ik

[ Voor 5% gewijzigd door Noork op 11-07-2008 12:12 ]


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Niet goed gezocht dus.. Dank jullie wel, zal de topics even doornemen.

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Noork schreef op vrijdag 11 juli 2008 @ 12:07:
[...]

Neen, met GD kun je ook mooie afbeeldingen genereren.
Het verschil zit hem in het gebruik van imagecreate vs. imagecreatetruecolor
en imagecopyresized vs imagecopyresampled ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 17:23

Sebazzz

3dp

Geweldige thumbnail class :')
PHP:
1
2
3
4
5
6
(..)
        } else {
            //DEFAULT
            echo "Not Supported File";
            exit();
        }

In plaats van dat ie in de constructor een exceptie opgooit als het bestandstype niet wordt herkent besluit ie zelf maar wat te outputten :')

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • Zenda
  • Registratie: Oktober 2001
  • Laatst online: 06-09 16:17

Zenda

goes milk!

Topicstarter
Gebruik nu deze functie die ik vond in het eerste topic die hier genoemd werd en heb hem vervangen met imagecopyresize, dat werkt!

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
<?php
    function ImageCopyResampleBicubic($dst_img, $src_img, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h)
    {
      /*
       * Port to PHP by John Jensen July 10 2001 -- original code
       * (in C, for the PHP GD Module) by jernberg@fairytale.se
       */
      for ($i = 0; $i < 256; $i++)
      {
        // get pallete. Is this algoritm correct?
        $colors = ImageColorsForIndex ($src_img, $i);
        ImageColorAllocate($dst_img, $colors['red'], $colors['green'], $colors['blue']);
      }
      $scaleX = ($src_w - 1) / $dst_w;
      $scaleY = ($src_h - 1) / $dst_h;
      $scaleX2 = $scaleX / 2.0;
      $scaleY2 = $scaleY / 2.0;
      for ($j = $src_y; $j < $dst_h; $j++)
      {
        $sY = $j * $scaleY;
        for ($i = $src_x; $i < $dst_w; $i++)
        {
          $sX = $i * $scaleX;
          $c1 = ImageColorsForIndex ($src_img, ImageColorAt ($src_img, (int) $sX, (int) $sY + $scaleY2));
          $c2 = ImageColorsForIndex ($src_img, ImageColorAt ($src_img, (int) $sX, (int) $sY));
          $c3 = ImageColorsForIndex ($src_img, ImageColorAt ($src_img, (int) $sX + $scaleX2, (int) $sY + $scaleY2));
          $c4 = ImageColorsForIndex ($src_img, ImageColorAt ($src_img, (int) $sX + $scaleX2, (int) $sY));
          $red = (int) (($c1['red'] + $c2['red'] + $c3['red'] + $c4['red']) / 4);
          $green = (int) (($c1['green'] + $c2['green'] + $c3['green'] + $c4['green']) / 4);
          $blue = (int) (($c1['blue'] + $c2['blue'] + $c3['blue'] + $c4['blue']) / 4);
          $color = ImageColorClosest ($dst_img, $red, $green, $blue);
          ImageSetPixel ($dst_img, $i + $dst_x, $j + $dst_y, $color);
        }
      }
    } 
?>


Tnx nogmaals!

Ander vraag; of moet ik daar een nieuw topic voor openen?

Als ik nu thumbnails wil maken van 100x100px, dan vervormd hij ze. Nu wil ik dat hij ze 100px breed maakt als de hoogte hoger is (of 100px hoog als de breedte groter is) en vervolgens de image links en rechts cropt naar 100px. Is zoiets mogelijk?

[ Voor 7% gewijzigd door Zenda op 11-07-2008 12:21 ]

Zenda likes some milk every now and then..


Acties:
  • 0 Henk 'm!

  • Eijkb
  • Registratie: Februari 2003
  • Laatst online: 13:44

Eijkb

Zo.

Alles is mogelijk. Zie php.net/gd

.


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
En zelf de langste zijde en de ratio bepalen en handhaven is brugklas wiskunde. En bovendien is het uberhaupt al knap om een gd voorbeeld te vinden waarbij hier niet op gelet wordt. :P

{signature}

Pagina: 1