Avatar billede superdreng Nybegynder
03. marts 2008 - 20:43 Der er 9 kommentarer og
1 løsning

Jacobdo resize script kan ikke bruges på PNG

Hej alle experter

Nu har jeg prøvet jacobdo's resize script på forskellige måde og jeg kan godt få den til at resize .jpg, men ikke .png?

Er der nogen som kan hjælpe mig med at rette fejlen, eller måske forklare mig hvad det er der går galt.

http://www.eksperten.dk/artikler/1130

Har prøvet på to forskellige png billeder og et jpg billed, hvor det var det eneste der lykkes.

Her er måde jeg gjorder det på:
<?php

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( $srcim, $newfilename, $png_q );
      break;
    default:
      return false;
  }
  imagedestroy( $dstim );
  imagedestroy( $srcim );
  return file_exists($newfilename);
}
resize('nyt.png', 'nytt.png', 510, 510)
?>

Mange tak for jeres hjælp!

Med venlig hilsen
Kevin
Avatar billede jakobdo Ekspert
03. marts 2008 - 21:00 #1
Prøv at udskriv: $png_q og se hvad den indeholder!
Avatar billede jakobdo Ekspert
03. marts 2008 - 21:13 #2
Pinligt....
Stavefejl i min kode...
Linjen:

imagepng( $srcim, $newfilename, $png_q );
Skal rettes til:
imagepng( $dstim, $newfilename, $png_q );
Avatar billede jakobdo Ekspert
03. marts 2008 - 21:25 #3
Du får et svar!
Avatar billede superdreng Nybegynder
03. marts 2008 - 21:26 #4
Det gør ikke noget :-) hehe

Husk at opdatere din artikel så den også bliver korrekt!

Kan jeg så spørge dig om du kan få denne script til at virke? Er ved at gå bananas over den. Hele det med at uploade går rigtig fint, men det er det med at resize der er problemmet.

Script, det er nok det tilsidst som er forkert:
<?php
ob_start();
if($_GET['funktion'] == "opretannon" && $_POST['opretannon'] == '1'){
$ip = $_SERVER['REMOTE_ADDR'];
require("../connect.php");
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);
}
$uploadDir = 'upload/'; //Bibliotek hvor filer uploades til - husk chmod 777
$allowedFileTypes = array('jpg','gif','png','jpeg');
  //Har vi en fil?
  if(is_uploaded_file($_FILES['file']['tmp_name']))
  {
    //Filendelse
    $extension = strtolower(pathinfo($_FILES['file']['name'],PATHINFO_EXTENSION));
   
    //Er filen en af de filer vi gerne vil have?
    if(in_array($extension,$allowedFileTypes))
    {
      //Vi flytter filen fra tmp til vores UPLOADDIR
      if(move_uploaded_file($_FILES['file']['tmp_name'],$uploadDir . basename($_FILES['file']['name'])))
      {
        echo '<h3 style="color:green;">File ('.basename($_FILES['file']['name']).') uploaded succesfully</h3>';
      }
      else
      {
        echo '<h3 style="color:red;">Error - unable to upload file: '.basename($_FILES['file']['name']).'</h3>';
      }
    }
    else
    {
      echo '<h3 style="color:red;">Wrong filetype, allowed filetypes are: ('.implode(',',$allowedFileTypes).')</h3>';
    }
  }
  else
  {
    echo '<h3 style="color:red;">No file selected<h3>';
  }
$imagel = basename($_FILES['file']['name']);
resize( $uploadDir . $imagel, $uploadDir . $imagel, 510, 510);
mysql_query("INSERT INTO marked (id, navn, status, desp, ip, image, opret) VALUES
          ('', '$_POST[navn]', '$_POST[status]',  '$_POST[tekst]', '$ip', '$imagel', '')") OR DIE(mysql_error());
header("location: http://www.racersport.dk/salg/index.php");
}
ob_end_flush();
?>

På forhånd mange tak for din hjælp!
Avatar billede jakobdo Ekspert
03. marts 2008 - 21:32 #5
Hvad er det problemet er? :o)
Avatar billede superdreng Nybegynder
03. marts 2008 - 22:03 #6
Undskyld at jeg ikke skrev det.

Men det er at den ikke skal forstørre billed hvis det nu kun er 50*50 og ens maks with and height er 510*510 px.

Hvordan gør jeg det?
http://www.racersport.dk/salg/vis.php?id=28
Avatar billede jakobdo Ekspert
03. marts 2008 - 22:11 #7
Du skal lave et ekstra tjek her:

$ow = imagesx( $srcim );
$oh = imagesy( $srcim );

ow = original bredde.
oh = original højde.
hvis ow < 510, stop funktion.
hvis oh < 510, stop funktion.
Avatar billede superdreng Nybegynder
08. marts 2008 - 19:54 #8
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 );
  // Forstørre ikke billed hvis den er mindre end maxhoejden og maxbredden
  if( $ow <= $maxw && $oh <= $maxh){
    return false;
  }
  $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 superdreng Nybegynder
08. marts 2008 - 19:56 #9
$ow = imagesx( $srcim );
  $oh = imagesy( $srcim );
  // Forstørre ikke billed hvis den er mindre end maxhoejden og maxbredden
  if( $ow <= $maxw && $oh <= $maxh){
    return false;
  }

Bare lige hvis du ville tilføje den til dit script, jacobdo :-)
Avatar billede jakobdo Ekspert
08. marts 2008 - 21:52 #10
Tjek! :oD
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