2013-10-09 89 views
3

我試圖將圖像添加到另一個圖像的模板;我正在使用PHP codeigniter;當兩個文件都是.PNG文件時,我有一段很好的代碼片段,可以很好地用於此目的;我的代碼如下:將圖像添加到另一個圖像

<?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'); 
?> 

但是,如果模板「圖像/精靈/ navIcons.png」是一個png文件和其他圖像是另一種類型的(可以說.JPG)我follwoing代碼不工作:

<?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'); 
?> 

-Am我缺少什麼? - 是否應該使用任何文件擴展名? - 模板可以是.PNG文件,另一個圖像可以是另一種類型(可以說.JPG)!可能是我需要改變的東西;

任何幫助表示讚賞! PS:我從這個論壇的一個很老的帖子得到了代碼;但我認爲它很老,沒有人檢查它,所以這就是爲什麼我在一個新的線程問我的問題!由於


感謝sinni800,

我應該在註釋中給您回覆,但因爲我想加我的代碼,我在這裏增加新的消息回覆。

我也嘗試了下面的代碼,其中我使用了「imagecreatefromjpeg」;我的代碼:

<?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'); 
?> 

但仍不能正常工作!

回答

1

我想@sinni800希望你做這樣的事情。

<?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

這似乎很明顯,你的問題是,你試圖使用imagecreatefrompng()爲JPEG。

請看http://www.php.net/manual/de/function.imagecreatefromjpeg.php的意見。特別是juozaspo at gmail dot com。它具有打開任何圖像類型的功能,因爲PHP的內部圖像功能不支持自動選擇文件類型。

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; 
}