我正在构建一个Facebook应用程序,我需要将多个配置文件图片切换为一个大图像。有没有办法在PHP?
答案 0 :(得分:1)
请参阅http://www.php.net/manual/en/function.imagecopy.php上的示例,并多次使用imagecopy()
。
答案 1 :(得分:1)
我是这个问题的新手,但我正在开发一个脚本来拍摄图像并将它们拼接在一起。现在它只有在所有图像大小相同的情况下才有效,但我正在努力改变它,我欢迎贡献。我已经用它来为网站制作CSS图像悬停/非悬停状态图形:
/**
* 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;
}