2013-06-15 4 views
0

iam essayant de redimensionner une image à une vignette avec php! Je n'obtiens pas d'erreurs mais cela ne sauvegarde pas la vignette sur mon serveur. Le code est:Redimensionner une image et enregistrer avec imagejpeg()

#Resize image 
function resize($input_dir, $cur_file, $newwidth, $output_dir) 
{ 
    $filename = $input_dir.'/'.$cur_file; 
    $format=''; 
    if(preg_match("/.jpg/i", $filename)) 
    { 
     $format = 'image/jpeg'; 
    } 
    if (preg_match("/.gif/i", $filename)) 
    { 
     $format = 'image/gif'; 
    } 
    if(preg_match("/.png/i", $filename)) 
    { 
     $format = 'image/png'; 
    } 
    if($format!='') 
    { 
     list($width, $height) = getimagesize($filename); 
     $newheight=$height*$newwidth/$width; 
     switch($format) 
     { 
      case 'image/jpeg': 
      $source = imagecreatefromjpeg($filename); 
      break; 
      case 'image/gif'; 
      $source = imagecreatefromgif($filename); 
      break; 
      case 'image/png': 
      $source = imagecreatefrompng($filename); 
      break; 
     } 
     $thumb = imagecreatetruecolor($newwidth,$newheight); 
     imagealphablending($thumb, false); 
     imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 
     imagejpeg($thumb, 'thumb_'.$cur_file); 
    } 
} 

Ma fonction ressemble:

resize(plugins_url().'/MyImagePlugin/img', 'testimg.jpg', "200"); 

L'image est dans le dossier "img" dans mon Plugin CIVD. La chose câblée est, que je ne reçois aucune erreur ?! CHMOD est 777 pour img-dossier.

Toute aide serait appréciée.

Répondre

2

Vous n'utilisez aucun chemin lorsque vous enregistrez l'image dans la ligne:

imagejpeg($thumb, 'thumb_'.$cur_file); 

$cur_file est réglé sur testing.jpg.

Vous devez ajouter le chemin d'accès au nom de fichier ou tenter de le créer quel que soit le répertoire en cours.

Les changements sont quelque chose comme:

function resize($input_dir, $cur_file, $newwidth, $output_dir = "") 
{ 
    if($output_dir == "") $output_dir = $input_dir; 

    ..... 

     imagejpeg($thumb, $output_dir.'/thumb_'.$cur_file); 
    } 
} 
+0

Je l'ai déjà essayé. avec 'imagejpeg ($ thumb, $ repertoire_entrée. '/ thumb _'. $ cur_file);' J'obtiens alors une erreur: 'Attention: imagejpeg(): Impossible d'ouvrir '...' pour écrire: Aucun fichier ou répertoire' Mais j'utilise le chemin de $ input_dir et ce chemin est 100% correct! – Ponch0

+0

Je ne vois pas comment votre fonction/la façon dont elle est appelée utilise le $ input_dir –

+0

'$ filename = $ repertoire_entrée. '/'. $ Cur_file;' Les deux sont stockés dans $ filename. – Ponch0

0

Je sais que ce n'est pas votre façon de faire, mais iam-vous qu'il peut vous aider.

if (isset($_FILES['image']['name'])) 
{ 
    $saveto = "dirname/file.jpg"; 
    move_uploaded_file($_FILES['image']['tmp_name'], $saveto); 
    $typeok = TRUE; 
    switch($_FILES['image']['type']) 
    { 
    case "image/gif": $src = imagecreatefromgif($saveto); break; 
    case "image/jpeg": // Both regular and progressive jpegs 
    case "image/pjpeg": $src = imagecreatefromjpeg($saveto); break; 
    case "image/png": $src = imagecreatefrompng($saveto); break; 
    default: $typeok = FALSE; break; 
    } 
    if ($typeok) 
    { 
    list($w, $h) = getimagesize($saveto); 
    $max = 500; 
    \\ you can change this to desired product for height and width. 
    $tw = $w; 
    $th = $h; 
    if ($w > $h && $max < $w) 
    {  
    $th = $max/$w * $h; 
    $tw = $max; 
    } 
    elseif ($h > $w && $max < $h)  
    { 
    $tw = $max/$h * $w; 
    $th = $max; 
    } 
    elseif ($max < $w) 
    { 
    $tw = $th = $max; 
    } 
    $tmp = imagecreatetruecolor($tw, $th);  
    imagecopyresampled($tmp, $src, 0, 0, 0, 0, $tw, $th, $w, $h); 
    imageconvolution($tmp, array(// Sharpen image 
    array(-1, -1, -1), 
    array(-1, 16, -1), 
    array(-1, -1, -1) 
), 8, 0); 
    imagejpeg($tmp, $saveto); 
    imagedestroy($tmp); 
    imagedestroy($src); 
    } 
    } 
Questions connexes