Avatar billede cyberesben Nybegynder
18. december 2004 - 20:45 Der er 11 kommentarer og
1 løsning

Aflæse kompressionsgraden på et JPEG billede

Jeg er ved at lave et script som tilføjer nogle vandmærker til billeder som jeg har i en mappe.

Problemet er at billederne kan være komprimeret i forskellige kvaliteter, så jeg vil mene at det er spild af plads at gemme alle  behandlede billeder i samme kvalitet.

Derfor vil jeg høre om der er nogen der kender en metode i PHP, til at udlæse hvor stærkt et JPEG billede er komprimeret, f.eks. via GD eller EXIF.
Avatar billede morteeart Nybegynder
18. december 2004 - 20:50 #1
c&p fra www.php.net/image (kommentarene)

Here's a funtion i used to resize and save images uploaded by the user, you can either create thumbnails or other images.
Main "feature" is that the width and height stay relativ to each other.

imgcomp is the quality, i turned it around so now its from 0 -best to 100 -most compressed.

For gif version just change the functions names.

function resampimagejpg($forcedwidth, $forcedheight, $sourcefile, $destfile, $imgcomp)
  {
  $g_imgcomp=100-$imgcomp;
  $g_srcfile=$sourcefile;
  $g_dstfile=$destfile;
  $g_fw=$forcedwidth;
  $g_fh=$forcedheight;

  if(file_exists($g_srcfile))
      {
      $g_is=getimagesize($g_srcfile);
      if(($g_is[0]-$g_fw)>=($g_is[1]-$g_fh))
          {
          $g_iw=$g_fw;
          $g_ih=($g_fw/$g_is[0])*$g_is[1];
          }
          else
          {
          $g_ih=$g_fh;
          $g_iw=($g_ih/$g_is[1])*$g_is[0]; 
          }
      $img_src=imagecreatefromjpeg($g_srcfile);
      $img_dst=imagecreate($g_iw,$g_ih);
      imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $g_iw, $g_ih, $g_is[0], $g_is[1]);
      imagejpeg($img_dst, $g_dstfile, $g_imgcomp);
      imagedestroy($img_dst);
      return true;
      }
      else
      return false;
  }
Avatar billede jakoba Nybegynder
18. december 2004 - 20:54 #2
Nej, når et .jpg billede først er komprimeret er det ikke muligt at se i billedfilen hvor komprimeret det er.
Avatar billede morteeart Nybegynder
18. december 2004 - 20:57 #3
ja, sorry for forslaget, havde ikke læst teksten helt igennem.

Efter at have læst flere kommentarer, vil jeg sige det samme som jakoba.
Avatar billede coderdk Praktikant
18. december 2004 - 22:27 #4
Det kan desværre ikke lade sig gøre. Du skal også tænke på, at hver gang billedet har været resizet, beskåret osv, falder kvaliteten...
Avatar billede cyberesben Nybegynder
18. december 2004 - 23:13 #5
hmmm

vil det så sige at jeg ikke har andre muligheder end at læse alle billederne ind, og derefter gemme dem alle i samme kompression? well, lidt spild af plads men ok hvis det er det eneste man kan
Avatar billede morteeart Nybegynder
18. december 2004 - 23:16 #6
ja, og det værste er at kvaliten ikke bliver bedre, kun filstørrelsen som bliver størrer.
Avatar billede cyberesben Nybegynder
21. december 2004 - 01:09 #7
jeg kunne self. lave en approksimering i 4 eller 8 trin, hvor jeg starter på midten, og så går op eller ned, indtil billedet fylder ca det samme som originalen
Avatar billede cyberesben Nybegynder
21. december 2004 - 01:51 #8
har lige siddet og leget lidt med det... havde sat scriptet til at lave en default kvalitet på 95%... outputbillederne er ca dobbelt så store som inputbillederne, men alligevel er de blevet mere uskarpe... man skulle da umiddelbart tro at kvaliten ikke blev forringet, så længe man komprimerede til en højere kvalitet end den originale, men sådan er det åbenbart ikke :-(
Avatar billede jakoba Nybegynder
21. december 2004 - 12:11 #9
desværre nej. en uskarp hvid plet kan være et ekstremt komprimeret billede, men det kan også godt være en knivskarpt højopløst billede af en lygte i tåget vejr. Det er ikke til at se på de enkelte pixels hvor komprimeret billedet er.

så idealet er at ALTID starte med det oprindelige skarpe billede, og lave vandmærket i det. hver gang du hiver billedet ind i dit billedbehandlingsprogram og ændrer noget mister du noget præcicion, også selvom du gemmer med minimal komprimering.

Et endnu bedre alternativ er slet ikke at gemme som .jpg førend til allersidst. der er andre billedformater (.tiff, .cpt, .bmp, ...) som ikke mister sporsomhelst detallier når du saver. De fylder til gengæld ad h... til.

mvh JakobA
Avatar billede cyberesben Nybegynder
22. december 2004 - 00:08 #10
jakoba: tjaa men mit kamera gemmer nu en gang billederne i JPG, (kan ikke gemme i RAW) så jeg kan ik rigtig gøre så meget ved det...

men jeg må bare tage til takke med at de fylder ca 50% mere, og stadig er i ca samme kvalitet - for vandmærke skal der sgu på!
Avatar billede jakoba Nybegynder
22. december 2004 - 03:46 #11
prøv med diverse abdre defaultkvaliteter. 75%, 65%, ... Internetkvalitet forventes alligevel ikke at være så fin som højglans fra fotohandleren.

Eller hvis kvaliteten virkelig er max prioritet, så hold dig fra GDlib og lignende serverside billedbehandling. Du få væsentlig bedre resultater med et godt manuelt billedbehandlingsprogram som paintshop eller photopaint og individuel tilretning af billederne.
Avatar billede cyberesben Nybegynder
25. januar 2005 - 14:41 #12
well vi måtte konstatere at det ikke kunne lade sig gøre, men hvis nogen vil have en del af poitene så smid et svar
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