2010-05-28 48 views
5

Tôi muốn tạo một hình ảnh bằng PHP với GD được sáng tác bởi các hình ảnh khác nhau. Ví dụ tôi có 6 hình ảnh (hoặc nhiều hơn) và tôi muốn tạo ra một hình ảnh có chứa những hình ảnh khác nhau.Tạo hình ảnh với GD chứa các hình ảnh khác

Khó khăn là hình ảnh cuối cùng của tôi phải có chiều rộng cố định và chiều cao (304x179), vì vậy nếu các hình ảnh khác nhau quá lớn, chúng phải được cắt. Đây là một ví dụ từ IconFinder:

This picture have 6 images http://cdn.iconfinder.net/design/images/_thumbs/is_twitter.png

bức tranh này được sáng tác bởi 6 hình ảnh, nhưng con chim thứ 3 (màu xanh) là cutted, và 4, 5 và 6 được cutted ở phía dưới. Đây là những gì tôi muốn, bạn có thể cho tôi một số trợ giúp để viết mã này trong PHP?

Cảm ơn

+0

+1 cho hình ảnh ví dụ tuyệt vời (khi tôi nhận được phiếu bầu tươi trong ngày, đó là ...) – JYelton

Trả lời

13

Tạo hình ảnh chính của bạn và coi đó là "canvas" của bạn.

Từ đó, sử dụng imagecopy() để sao chép các hình ảnh nhỏ hơn vào hình ảnh canvas.

Xem này ví dụ:

<?php 
header('Content-Type: image/jpg'); 
$canvas = imagecreatetruecolor(304, 179); 
$icon1 = imagecreatefromjpeg('icon.jpg'); 
$icon2 = imagecreatefromjpeg('icon2.jpg'); 
// ... add more source images as needed 
imagecopy($canvas, $icon1, 275, 102, 0, 0, 100, 100); 
imagecopy($canvas, $icon2, 0, 120, 0, 0, 100, 100); 
// ... copy additional source images to the canvas as needed 
imagejpeg($canvas); 
?> 

Trong ví dụ của tôi, icon.jpg là một hình ảnh 100x100 mà tôi đang đặt trong vải mà góc trên bên trái của nó nằm ở vị trí 275, 102 trong canvas, mà cắt bên phải.

Sửa

tôi điều chỉnh mã để được thêm tương tự với những gì bạn đang làm.

+0

Có nhưng cách tôi thêm tất cả hình ảnh đầu tiên để tạo hình ảnh ONE? Và làm thế nào tôi đếm được bao nhiêu hình ảnh tôi sẽ cần để tạo ra hình ảnh cuối cùng? Bởi vì nếu hình ảnh ban đầu là 128 * 128 tôi sẽ cần 6 hình ảnh chẳng hạn, nhưng nếu chúng là 32x32 tôi sẽ cần thêm – Jensen

+0

Cảm ơn Nó sẽ giúp tôi giải quyết vấn đề – Jensen

+0

Tôi hiểu ý của bạn là gì, bạn chỉ muốn thêm nhiều như sẽ hiển thị (mặc dù bị cắt) trong hình ảnh canvas. Bạn sẽ cần phải viết một vòng quanh phần mã tải hình ảnh và 'imagecopy' của chúng vào khung vẽ. Tất cả các hình ảnh đều có kích thước giống nhau không? Tôi không chắc bạn muốn tính toán vị trí của chúng trong canvas như thế nào, nhưng bạn có thể sử dụng 'imagesx' và' imagesy' để tìm kích thước. – JYelton

0

Dưới đây là một thử nghiệm không sửa đổi spinen từ một trong những kịch bản của tôi, hy vọng nó có thể có ích:

header('Content-type: image/png'); 

    $image = array() //Populate this array with the image paths 

    //Create the Letters Image Objects 
     foreach($image as $a){ 
     $image['obj'][] = imageCreateFromPNG($a); 
     }unset($a); 

     $canvasW = 300; 
     $canvasH = 300; 

    //Create Canvas 
     $photoImage = imagecreatetruecolor($canvasW,$canvasH); 
     imagesavealpha($photoImage, true); 
     $trans_color = imagecolorallocatealpha($photoImage, 0, 0, 0, 127); 
     imagefill($photoImage, 0, 0, $trans_color); 

    //Merge Images 
     $Offset_y = 0; 
     $images_by_row = 3; 
     $images_rows_height = 100; // height of each image row 
     $counter = 0; 

     foreach($image['obj'] as $a){ 
     $counter++; 

     $width = ceil(imagesx($a)); 
     $height = ceil(imagesy($a)); 

     if(!isset($offset)){ $offset = 1; } 

     imageComposeAlpha($photoImage, $a, $offset, $Offset_y,$width,$height); 

     if($offset >= 1){ 
      $offset = $offset + $width; 
     } 

     //Check if new row next time 
     if($counter >= $images_by_row){ 
      if($images_by_row%$counter){ 
      $offset_y += $images_rows_height; 
      } 
     } 

     }unset($a); 

     imagepng($photoImage); 
Các vấn đề liên quan