Avatar billede chriz7913 Nybegynder
20. maj 2008 - 12:48 Der er 23 kommentarer og
1 løsning

Resize billede

Hej, er igang med et projekt hvor der på forsiden af min hjemmeside skal vises 6 små billeder, og når man klikker på dem åbner de i original størrelse. MEN..
Når jeg sætter bredden og højden på billedet (<img scr="" width="80" height="60">) så bliver billedet ret grumset. ville gerne spørge om man kan få php eller evt javascript til at vise billederne i det format jeg ønsker eller man bliver nødt til at resize?? :)
Avatar billede chriz7913 Nybegynder
20. maj 2008 - 12:48 #1
Avatar billede w13 Novice
20. maj 2008 - 12:50 #2
Du bliver nødt til at resize med php, ja.
Avatar billede jakobdo Ekspert
20. maj 2008 - 13:24 #3
Kig i artikler, der har jeg lavet en om netop resize af billede med php.
Avatar billede maskso Nybegynder
21. maj 2008 - 10:22 #4
Lidt kode til at resize et billede i php, til fast en width, og få det til at holde formatet:


if (file_exists("users/$email/photo.jpg")) {
list($width, $height) = getimagesize("users/$email/photo.jpg");

$mwidth = ($width - 100);
$proc = ($mwidth/$width*100);
$hres = ($height*$proc/100);
$n_height = ($height-$hres);
$n_width = (100);

$abc = imagecreatefromjpeg("users/$email/photo.jpg");
$def = imagecreatetruecolor($n_width, $n_height);
imagecopyresized($def, $abc, 0, 0, 0, 0, $n_width, $n_height, $width, $height);
imagejpeg($def, "users/$email/pic.jpg", 100);
ImageDestroy($abc);
ImageDestroy($def);
}
Avatar billede chriz7913 Nybegynder
21. maj 2008 - 10:58 #5
nu har jeg kigget jakobdo's kode igennem og afprøvet den, men der bliver ikke udskrevet noget!?
kan jeg have glemt noget
======
$filename = roeg1.jpg;
$newfilename = nyfil.jpg;
$maxw = 50;
$maxh = 40;
function resize( $filename, $newfilename, $maxw, $maxh, $quality=85 )
{
  $ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
  switch($ext)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
      $srcim = imagecreatefromjpeg( $filename );
      break;
    case 'gif':
      $srcim = imagecreatefromgif( $filename );
      break;
    case 'png':
      $srcim = imagecreatefrompng( $filename );
      break;
    default:
      return false;
  }
  $ow = imagesx( $srcim );
  $oh = imagesy( $srcim );
  $wscale = $maxw / $ow;
  $hscale = $maxh / $oh;
  $scale = min( $hscale, $wscale );
  $nw = round( $ow * $scale, 0 );
  $nh = round( $oh * $scale, 0 );
  $dstim = imagecreatetruecolor( $nw, $nh );
  imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
  switch($ext)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
      imagejpeg( $dstim, $newfilename, $quality );
      break;
    case 'gif':
      imagegif( $dstim, $newfilename );
      break;
    case 'png':
      $png_q = floor( abs( $quality / 10 - 9.9 ) );
      imagepng( $dstim, $newfilename, $png_q );
      break;
    default:
      return false;
  }
  imagedestroy( $dstim );
  imagedestroy( $srcim );
  return file_exists($newfilename);
}
Avatar billede w13 Novice
21. maj 2008 - 11:00 #6
Hvad skulle der udskrives? :)
Avatar billede jakobdo Ekspert
21. maj 2008 - 11:02 #7
Du mangler at kalde funktionen resize()
Og der skal ikke udskrives noget, men den tager et billede og resizer det.
Avatar billede chriz7913 Nybegynder
21. maj 2008 - 11:40 #8
Hvordan kan jeg få den til kun at resize billedet uden at gemme det, bare vise det på skærmen? :)
Avatar billede jakobdo Ekspert
21. maj 2008 - 11:49 #9
Det kan det kode ikke.
Men er det ikke dumt ikke at gemme det ?
Avatar billede chriz7913 Nybegynder
21. maj 2008 - 12:22 #10
Jo, tror os at jeg bruger dit script til at gemme dem, og så kan php tjekke om filen findes og hvis ik, kan den lave et resize og gemme det.

Men når jeg så skriver:
resize();
forenden af koden, kommer der en fejl:

Warning: Missing argument 4 for resize() in W:\www\andet\resize.php on line 6

Hvad er der galt? :o
Avatar billede jakobdo Ekspert
21. maj 2008 - 12:27 #11
Du skal kalde:

resize($original_filnavn, $resized_filnavn, $max_bredde, $max_hoejde, $kvalitet);
Avatar billede chriz7913 Nybegynder
21. maj 2008 - 12:46 #12
ved ik hvad er der galt nu, den resizer fint, og billedet bliver også lagt i den valgte mappe, men det bliver af dårlig kvalitet http://www.avaz.dk/design/error.jpg
har prøvet at ændre koden men det hjælper ikke :(

function resize($filename, $newfilename, $maxw, $maxh, $quality=100 )
{
  $ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
  switch($ext)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
      $srcim = imagecreatefromjpeg( $filename );
      break;
    case 'gif':
      $srcim = imagecreatefromgif( $filename );
      break;
    case 'png':
      $srcim = imagecreatefrompng( $filename );
      break;
    default:
      return false;
  }
  $ow = imagesx( $srcim );
  $oh = imagesy( $srcim );
  $wscale = $maxw / $ow;
  $hscale = $maxh / $oh;
  $scale = min( $hscale, $wscale );
  $nw = round( $ow * $scale, 0 );
  $nh = round( $oh * $scale, 0 );
  $dstim = imagecreatetruecolor( $nw, $nh );
  imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
  switch($ext)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
      imagejpeg( $dstim, $newfilename, $quality );
      break;
    case 'gif':
      imagegif( $dstim, $newfilename );
      break;
    case 'png':
      $png_q = floor( abs( $quality / 10 - 10 ) );
      imagepng( $dstim, $newfilename, $png_q );
      break;
    default:
      return false;
  }
  imagedestroy( $dstim );
  imagedestroy( $srcim );
  return file_exists($newfilename);
}
Avatar billede jakobdo Ekspert
21. maj 2008 - 12:59 #13
Hvis mig den kode du har brugt, da du kaldte resize()
Jeg skal ikke se funktionen igen...
Avatar billede chriz7913 Nybegynder
21. maj 2008 - 13:01 #14
resize($filename, $newfilename, $maxw, $maxh, $quality);
Avatar billede jakobdo Ekspert
21. maj 2008 - 13:16 #15
Men hvad indeholder: $filename, $newfilename, $maxw, $maxh og $quality ??
Avatar billede chriz7913 Nybegynder
21. maj 2008 - 13:28 #16
$filename = "roeg1.jpg";
$newfilename = "nyfil.jpg";
$maxw = 80;
$maxh = 60;
function resize($filename, $newfilename, $maxw, $maxh, $quality=100 )
Avatar billede jakobdo Ekspert
21. maj 2008 - 13:42 #17
Prøv at ret til 85 ?
Avatar billede chriz7913 Nybegynder
21. maj 2008 - 13:50 #18
nej,har fundet ud af det.
istedet for
$filename = "roeg1.jpg";
$newfilename = "nyfil.jpg";
$maxw = 80;
$maxh = 60;
function resize($filename, $newfilename, $maxw, $maxh, $quality=100 )
skulle jeg ændre det til
$filename = "roeg1.jpg";
$newfilename = "nyfil.jpg";
$maxw = 80;
$maxh = 60;
$quality = 100;
function resize($filename, $newfilename, $maxw, $maxh, $quality )

==

men har lige et sidste problem, hvordan for jeg sidestørrelserne til at arbejde uahængigt af hinanden?
Avatar billede jakobdo Ekspert
21. maj 2008 - 14:05 #19
Du mener du ikke vil beholde ratio ?
Avatar billede chriz7913 Nybegynder
21. maj 2008 - 14:09 #20
hvis ratio er det originale format så ja :)

Så jeg kan give billedet en ny højre og en ny bredde der ikke har nogle relation til hinanden
Avatar billede jakobdo Ekspert
21. maj 2008 - 14:20 #21
Erstat:
$wscale = $maxw / $ow;
  $hscale = $maxh / $oh;
  $scale = min( $hscale, $wscale );
  $nw = round( $ow * $scale, 0 );
  $nh = round( $oh * $scale, 0 );
med:
  $nw = $maxw;
  $nh = $maxh;
Avatar billede chriz7913 Nybegynder
23. maj 2008 - 12:37 #22
mange tak, jakobdo, læg et svar 8D
Avatar billede jakobdo Ekspert
23. maj 2008 - 14:12 #23
Svar!
Avatar billede jakobdo Ekspert
24. maj 2008 - 09:29 #24
Takker for point.
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