2011-02-11 6 views
0

나는 facebook 앱에 불을 붙이고 있는데, 여러 프로필 사진을 하나의 큰 이미지로 전환해야합니다. PHP에서 가능한 방법이 있습니까?PHP에서 여러 개의 이미지를 하나의 단일 이미지로 스티칭하는 방법은 무엇입니까?

+0

이 : 나는 웹 사이트에 대한 CSS 이미지 - 호버/비 호버 상태 그래픽을 만들기 위해이를 사용했습니다? – Jeyaganesh

+0

나는 이미지를 바느질하는 대신에 대안을 만들었습니다. 정사각형 상자를 따라 표시했습니다. http://devlup.com/programming/php/how-to-create-facebook-application-using-php-and-graph-api/1589/ – Jeyaganesh

답변

1

저는이 질문에 새로운 것이지만 이미지를 가져와 함께 결합하는 스크립트를 개발 중입니다. 현재 모든 이미지의 크기가 동일하면 작동하지만 변경 작업을하고 있으며 기고를 환영합니다. 사진 콜라주를 만들 수있는 API가

https://github.com/ElusiveMind/image_stitch

/** 
    * Image stitching function. 
    * 
    * Now operates with images of varying heights as well as widths. 
    * 
    * @param array $files 
    * An array of files. Each element is a path to the file in question. 
    * 
    * @param int $rows 
    * The number of rows the end resulting image will have. The images 
    * will be added to the new image in the order of the array divided 
    * equally in number to the rows specified here. 
    * 
    * @param int $action 
    * An integer (or static define) of the action to take on the resulting 
    * image. 
    * IMAGE_STITCH_DISPLAY - Display the item (default action). 
    * IMAGE_STITCH_SAVE - Save the image to the file system (path required). 
    * IMAGE_STITCH_RETURN - Return the resulting file pointer to the calling 
    *      function for processing there. 
    * 
    * @param string $path 
    * The path of where to save the resulting new image. 
    * 
    * @return image $image 
    * The image data that can have whatever done to it. 
    */ 
    function image_stitch($files, $rows = 2, $action = IMAGE_STITCH_DISPLAY, $path = NULL) { 
     foreach($files as $file) { 
     $path = explode('.', $file); 
     if ($path[count($path)-1] == 'png') { 
      $images[] = imagecreatefrompng($file); 
     } 
     else { 
      $images[] = imagecreatefromjpeg($file); 
     } 
     } 
     $number_of_images = count($images); 
     $number_of_columns = ($number_of_images/$rows) - 1; 
     $total_width = 0; 
     $max_width = 0; 
     $total_heights = array(); 
     $widths = array(array()); 
     $grid = array(array()); 
     for ($y = 1; $y <= $rows; $y++) { 
     $this_height = $this_width = 0; 
     for ($x = 0; $x <= $number_of_columns; $x++) { 
      if (empty($files[(($y + ($x - 1)) + ($number_of_columns * ($y - 1)))])) { 
      next; 
      } 
      $image_size = getimagesize($files[(($y + ($x - 1)) + ($number_of_columns * ($y - 1)))]); 
      $grid[$x][$y] = $images[(($y + ($x - 1)) + ($number_of_columns * ($y - 1)))]; 
      $width = $image_size[0]; 
      $height = $image_size[1]; 
      $widths[$x][$y][] = $width; 

      $this_width += $width; 
      if ($height > $this_height) { 
      $this_height = $height; 
      } 

      if ($x == 0 && $y > 1) { 
      $total_heights[] = $this_height; 
      if ($max_width < $this_width) { 
       $max_width = $this_width; 
      } 
      } 
     } 
     } 

     $total_heights[] = $this_height; 
     if ($max_width < $this_width) { 
     $max_width = $this_width; 
     } 

     $destination_image = imagecreatetruecolor($max_width, array_sum($total_heights)); 
     $black = imagecolorallocate($destination_image, 0, 0, 0); 
     imagecolortransparent($destination_image, $black); 
     imagealphablending($destination_image, FALSE); 
     imagesavealpha($destination_image, TRUE); 

     // place our images 
     foreach($grid as $instance_key => $instance) { 
     $height = $total_heights[$instance_key]; 
     foreach($instance as $reference_key => $reference) { 
      imagecopyresampled($destination_image, $reference, $instance_key * 180, ($reference_key - 1) * 180, 0, 0, 180, 180, 180, 180); 
     } 
     } 

     // Display the image if directed 
     if ($action = IMAGE_STITCH_DISPLAY) { 
     header('content-type: image/png'); 
     imagepng($destination_image); 
     imagedestroy($destination_image); 
     exit(); 
     } 

     // Return the image if directed. 
     if ($action == IMAGE_STITCH_RETURN) { 
     return $destination_image; 
     } 

     // If we are saving the image, save it with no compression or filters. 
     if (!$empty($path)) { 
     imagepng($destination_image, $path, 0, PNG_NO_FILTER); 
     } 

     return TRUE; 
    } 
관련 문제