Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * 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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement