[perl] Image resize met zelfde ratio

Pagina: 1
Acties:

  • BKJ
  • Registratie: April 2000
  • Laatst online: 07-09 12:42
Ik heb de module GD.pm en die wil ik graag gebruken voor het resizen van een image binnen bepaalde boundaries. De verhouding moet wel gelijk blijven uiteraard!

Hoe doe ik dit?

Kamer huren


  • T.T.
  • Registratie: April 2000
  • Laatst online: 22-01 14:13

T.T.

Sowieso

zelfde verhoudingen doe je in het algemeen zo:

schaalfactor = orginele x / gewenste x
nieuwe y = orginele y / schaalfactor

Of bedoel je dat niet? (zal haast wel niet :+)

  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

Combineer T.T. z'n berekening met LOST_GUNT zijn scriptje (is PHP, maar GD gebruikt overal dezelfde functies dus moeilijk moet het niet zijn in Perl) en overheers de wereld met je eigen image-resize script ;)

Code vind je hier.

En post het resultaat hier s.v.p., voor toekomstige vragen hierover.

This can no longer be ignored.


  • BKJ
  • Registratie: April 2000
  • Laatst online: 07-09 12:42
Ik heb de volgende en werkende :) code gebouwd:
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
36
37
#!/usr/bin/perl

use GD;
use POSIX;


$file="test.jpg";
$maxwidth = "300";
$maxheight = "400";


$srcimage = GD::Image->newFromJpeg($file);
  ($srcW,$srcH) = $srcimage->getBounds();
  $wdiff = $srcW - $maxwidth;
  $hdiff = $srcH - $maxheight;
  

  if ($wdiff > $hdiff) {
    $newW = $srcW - $wdiff;
    $aspect = ($newW/$srcW);
    $newH = int($srcH * $aspect);
  } else {
    $newH = $srcH - $hdiff;
    $aspect = ($newH/$srcH);
    $newW = int($srcW * $aspect);
  }

 
  
  $newimage = new GD::Image($newW,$newH);
  $newimage->copyResized($srcimage,0,0,0,0,$newW,$newH,$srcW,$srcH);
  
 
open(F,">test.jpg");
binmode F;
print F $newimage->jpeg(100);
close(F)

Deze code opent een test.jpg en geeft deze als maximum 400 bij 300 pixels en resized hem vervolgens.

Kamer huren