2013-10-09 3 views
3

J'essaye d'ajouter une image à un modèle qui est une autre image aussi; J'utilise PHP codeigniter; J'ai un bon extrait de code qui fonctionne bien à cette fin lorsque les deux fichiers sont des fichiers .PNG; mon code est le suivant:Ajouter une image dans une autre image

<?php 

function attachIcon($imgname) 
{ 
    $mark = imagecreatefrompng($imgname); 
imagesavealpha($mark, true); 

    list($icon_width, $icon_height) = getimagesize($imgname); 

    $img = imagecreatefrompng('images/sprites/navIcons.png'); 
imagesavealpha($img, true); 

    $move_left = 10; 
    $move_up = 9; 

    list($mainpic_width, $mainpic_height) = getimagesize('images/sprites/navIcons.png'); 
    imagecopy($img, $mark, $mainpic_width-$icon_width-$move_left, $mainpic_height-$icon_height-$move_up, 0, 0, $icon_width, $icon_height); 
    imagepng($img); // display the image + positioned icon in the browser 
    //imagepng($img,'newnavIcon.png'); // rewrite the image with icon attached. 
} 

header('Content-Type: image/png'); 
attachIcon('icon.png'); 
?> 

Toutefois, si le modèle « images/sprites/navIcons.png » est un fichier .png et l'autre image est un autre type (permet de dire .JPG) mon code follwoing ne fonctionne pas:

<?php 

function attachIcon($imgname) 
{ 
    $mark = imagecreatefrompng($imgname); 
imagesavealpha($mark, true); 

    list($icon_width, $icon_height) = getimagesize($imgname); 

    $img = imagecreatefrompng('images/sprites/navIcons.png'); 
imagesavealpha($img, true); 

    $move_left = 10; 
    $move_up = 9; 

    list($mainpic_width, $mainpic_height) = getimagesize('images/sprites/navIcons.png'); 
    imagecopy($img, $mark, $mainpic_width-$icon_width-$move_left, $mainpic_height-$icon_height-$move_up, 0, 0, $icon_width, $icon_height); 
    imagepng($img); // display the image + positioned icon in the browser 
    //imagepng($img,'newnavIcon.png'); // rewrite the image with icon attached. 
} 

header('Content-Type: image/jpg'); 
attachIcon('icon.jpg'); 
?> 

-Suis je manque quelque chose? - Est-il censé fonctionner avec n'importe quelle extension de fichier? - le modèle peut-il être un fichier .PNG et l'autre image un autre type (disons .JPG)! Peut-être que j'ai besoin de changer quelque chose;

Toute aide est appréciée! PS: J'ai reçu le code d'un très vieux post dans ce forum; mais je pensais que c'était assez vieux et personne ne le vérifie, alors c'est pourquoi je pose ma question dans un nouveau fil! Merci


Merci sinni800,

je devais vous répondre dans les commentaires, mais depuis que je veux ajouter mon code, j'ai ajouté un nouveau message ici pour répondre.

J'ai aussi essayé le code suivant dans lequel j'ai utilisé "imagecreatefromjpeg"; mon code:

<?php 

     function attachIcon($imgname) { 
      $mark = imagecreatefromjpeg($imgname); 
      imagesavealpha($mark, true); 

      list($icon_width, $icon_height) = getimagesize($imgname); 

      $img = imagecreatefrompng(base_url() . '/uploaded_images/output/viewer.png'); 
      imagesavealpha($img, true); 

      $move_left = 280; 
      $move_up = 450; 

      list($mainpic_width, $mainpic_height) = getimagesize(base_url() . '/uploaded_images/output/viewer.png'); 
      imagecopy($img, $mark, $mainpic_width - $icon_width - $move_left, $mainpic_height - $icon_height - $move_up, 0, 0, $icon_width, $icon_height); 
      imagepng($img); // display the image + positioned icon in the browser 
      //imagepng($img,'newnavIcon.png'); // rewrite the image with icon attached. 
     } 

     header('Content-Type: image/jpeg'); 

     attachIcon(base_url().'/uploaded_images/output/koala.jpg'); 
?> 

mais ne fonctionne toujours pas!

Répondre

1

Je pense que @ sinni800 voulait que vous fassiez quelque chose comme ça.

<?php 
function open_image ($file) { 
    $size=getimagesize($file); 
    switch($size["mime"]){ 
     case "image/jpeg": 
      $im = imagecreatefromjpeg($file); //jpeg file 
     break; 
     case "image/gif": 
      $im = imagecreatefromgif($file); //gif file 
     break; 
     case "image/png": 
      $im = imagecreatefrompng($file); //png file 
     break; 
     default: 
      $im=false; 
     break; 
    } 
    return $im; 
} 


function attachIcon($imgname) 
{ 
    $mark = open_image($imgname); 
    if($mark !== false){ 
     imagesavealpha($mark, true); 

     list($icon_width, $icon_height) = getimagesize($imgname); 

     $img = imagecreatefrompng('images/sprites/navIcons.png'); 
     imagesavealpha($img, true); 

     $move_left = 10; 
     $move_up = 9; 

     list($mainpic_width, $mainpic_height) = getimagesize('images/sprites/navIcons.png'); 
     imagecopy($img, $mark, $mainpic_width-$icon_width-$move_left, $mainpic_height-$icon_height-$move_up, 0, 0, $icon_width, $icon_height); 
     imagepng($img); // display the image + positioned icon in the browser 
    } 
} 

header('Content-Type: image/png'); 
attachIcon('icon.png'); 
?> 
0

Il semble évident que votre problème est que vous essayez d'utiliser imagecreatefrompng() pour un JPEG.

Veuillez regarder les commentaires au http://www.php.net/manual/de/function.imagecreatefromjpeg.php. Surtout celui par juozaspo at gmail dot com. Il a une fonction pour ouvrir n'importe quel type d'image, parce que la fonction d'image interne de PHP ne supporte pas le choix automatique du type de fichier.

function open_image ($file) { 
    //detect type and process accordinally 
    global $type; 
    $size=getimagesize($file); 
    switch($size["mime"]){ 
     case "image/jpeg": 
      $im = imagecreatefromjpeg($file); //jpeg file 
     break; 
     case "image/gif": 
      $im = imagecreatefromgif($file); //gif file 
     break; 
     case "image/png": 
      $im = imagecreatefrompng($file); //png file 
     break; 
    default: 
     $im=false; 
    break; 
    } 
    return $im; 
} 
Questions connexes