2016-02-14 5 views
1

J'utilise ce code pour ajouter une image png comme filigrane à l'image téléchargée mais le résultat n'est pas une image et ne veut pas utiliser l'en-tête() je veux que le code continue à exécuter d'autres requêtes php sans naviguer vers une autre page pour afficher l'image. L'image se téléversées, mais sans le filigrane et l'en-tête() n'afficher une image juste un petit carré grisajouter l'image filigrane à l'image téléchargée

$path = "../large/"; 
$num = substr(md5(mt_rand(1,9999999999)),0,9);  
$new_name = $path.$num.".jpg"; 
$image = $num.".jpg"; 
move_uploaded_file($img_tmpname,$new_name); 
$image = imagecreatefromjpeg($new_name); 
$logoImage = imagecreatefrompng("images/watermark.png"); 
imagealphablending($logoImage, true); 
$imageWidth=imagesx($image); 
$imageHeight=imagesy($image); 
$logoWidth=imagesx($logoImage); 
$logoHeight=imagesy($logoImage); 

imagecopy(
    // destination 
    $image, 
    // source 
    $logoImage, 
    // destination x and y 
    $imageWidth-$logoWidth, $imageHeight-$logoHeight, 
    // source x and y 
    0, 0, 
    // width and height of the area of the source to copy 
    $logoWidth, $logoHeight); 

// Set type of image and send the output 
header("Content-type: image/png"); 
imagePng($image); 

// Release memory 
imageDestroy($image); 
imageDestroy($imageLogo); 
+0

'' imagePng' devrait être imagepng' et '' imageDestroy' devrait être imagedestroy' – RamRaider

+0

le même résultat –

+0

le chemin 'images/watermark.png' ~ ne d'abord le fichier existe à cet endroit et ont d'autre part vous essayé d'utiliser le chemin complet de cette image? – RamRaider

Répondre

2

Je l'ai testé cela en utilisant le code ci-dessous et cela a fonctionné ok. Évidemment, j'ai utilisé des chemins pertinents pour mon système de test, mais j'espère que cela devrait aider. L'une des choses les plus importantes et souvent oubliées lors du téléchargement et du traitement des fichiers téléchargés est le enctype du formulaire - j'ai donc inclus mon formulaire de test à titre d'exemple.

Si vous souhaitez enregistrer l'image et l'afficher avec le filigrane, utilisez la fonction imagepng deux fois, une fois avec un nom de fichier et l'autre sans.

<form method='post' action='/test/so/wtrmarkimg.php' enctype='multipart/form-data'> 
    <h1>Image uploader - Watermark</h1> 
    <input type='file' name='image' /> 
    <input type='submit' value='Submit' /> 
</form> 

<?php 

    #$path = "../large/"; 

    $path='c:/temp/';/* output path for images generated */ 
    $watermarksrc=realpath('c:/wwwroot/images/watermark.png');  

    if(isset($_FILES['image'])){ 

     $img_tmpname=$_FILES['image']['tmp_name']; 


     $num = substr(md5(mt_rand(1,9999999999)),0,9);  
     $new_name = $path.$num.".jpg"; 
     $image = $num.".jpg"; 

     if(move_uploaded_file($img_tmpname, $new_name)){ 

      $image = imagecreatefromjpeg($new_name); 
      $logoImage = imagecreatefrompng($watermarksrc); 
      imagealphablending($logoImage, true); 

      $imageWidth=imagesx($image); 
      $imageHeight=imagesy($image); 
      $logoWidth=imagesx($logoImage); 
      $logoHeight=imagesy($logoImage); 

      imagecopy(
       $image, 
       $logoImage, 
       $imageWidth-$logoWidth, $imageHeight-$logoHeight, 
       0, 0, 
       $logoWidth, $logoHeight); 

      // Set type of image and send the output 
      header("Content-type: image/png"); 
      imagepng($image);/*display image with watermark */ 
      @imagepng($image, $new_name);/* save image with watermark */ 

      // Release memory 
      imagedestroy($image); 
      imagedestroy($imageLogo); 
     } 
    } else { 
     echo "ERROR"; 
     print_r($_FILES); 
    } 
?> 
+0

Aucune erreur et aucune image postée. L'image originale a juste été déplacée sur le chemin. –

+0

pouvez-vous montrer comment et comment vous avez modifié votre code? – RamRaider

+0

Ajusté un peu et fonctionne maintenant bien merci beaucoup $ chemin = '../grand /';/* chemin de sortie pour les images générées */ \t $ watermarksrc = realpath ('images/watermark.png'); –