日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 远程图片合拼,PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】...

發(fā)布時間:2025/3/11 php 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 远程图片合拼,PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文實例講述了PHP實現(xiàn)將幾張照片拼接到一起的合成圖片功能。共享給大家供大家參考,詳細如下:

/**

* 作品合成程序

* 針對單面,封面不做特殊處理

*/

$src_path = $argv[1]; // php該文件,第一個參數(shù)是文件夾名(作品集),可相對路徑

$dst_path = '../image/'.$src_path; // 生成文件存放的目標位置

if (!file_exists($dst_path)){

mkdir($dst_path);

}

// 合成圖推薦大小,單頁大小建議:1120*1600

$g_width = 1120;

$g_height = 1600;

$g_border = 20; // 邊框

// 模板

// 圖片張數(shù)=>array(位置=>array(x,y,width,height))

$g_models = array(

1=>array( // 單頁總張數(shù)

0=>array( // 位置

'x' => 0 + $g_border,

'y' => 0 + $g_border,

'w' => $g_width - 2*$g_border,

'h' => $g_height - 2*$g_border,

),

),

3=>array(

0=>array(

'x' => 0 + $g_border,

'y' => 0 + $g_border,

'w' => $g_width - 2*$g_border,

'h' => ($g_height - 3*$g_border)/2,

),

1=>array(

'x' => 0 + $g_border,

'y' => 0 + $g_border + ($g_height - 3*$g_border)/2 + $g_border,

'w' => ($g_width - 3*$g_border)/2,

'h' => ($g_height - 3*$g_border)/2,

),

2=>array(

'x' => 0 + $g_border + ($g_width - 3*$g_border)/2 + $g_border,

'y' => 0 + $g_border + ($g_height - 3*$g_border)/2 + $g_border,

'w' => ($g_width - 3*$g_border)/2,

'h' => ($g_height - 3*$g_border)/2,

),

),

4=>array(

0=>array(

'x' => 0 + $g_border,

'y' => 0 + $g_border,

'w' => ($g_width-3*$g_border)/2,

'h' => ($g_height-3*$g_border)/2,

),

1=>array(

'x' => 0 + $g_border + ($g_width-3*$g_border)/2 + $g_border,

'y' => 0 + $g_border,

'w' => ($g_width-3*$g_border)/2,

'h' => ($g_height-3*$g_border)/2,

),

2=>array(

'x' => 0 + $g_border,

'y' => 0 + $g_border + ($g_height-3*$g_border)/2 + $g_border,

'w' => ($g_width-3*$g_border)/2,

'h' => ($g_height-3*$g_border)/2,

),

3=>array(

'x' => 0 + $g_border + ($g_width-3*$g_border)/2 + $g_border,

'y' => 0 + $g_border + ($g_height-3*$g_border)/2 + $g_border,

'w' => ($g_width-3*$g_border)/2,

'h' => ($g_height-3*$g_border)/2,

),

),

);

// 排版

$g_tasks = array(

0 => array(0), // 封面封底

1 => array(1),

2 => array(2),

3 => array(3),

4 => array(4,5,6),

5 => array(7),

6 => array(8),

7 => array(9,10,11),

8 => array(12),

9 => array(13),

10 => array(14,15,16),

11 => array(17),

12 => array(18),

13 => array(19,20,21),

14 => array(22),

15 => array(23),

16 => array(24,25,26),

17 => array(27,28,29),

18 => array(30),

19 => array(31),

20 => array(32,33,34),

21 => array(35),

22 => array(36),

23 => array(37),

24 => array(38,39,40,41),

25 => array(42,43,44),

26 => array(45),

27 => array(46),

28 => array(47,48,49),

29 => array(50),

30 => array(51),

);

// 獲取文件夾下的所有圖片名

$jpgs = array();

$files = scandir($src_path); // 目錄下所有文件名

foreach($files as $file){

$path_parts = pathinfo($src_path.'/'.$file);

if($path_parts['extension'] == 'jpg'){

$jpgs[] = $src_path.'/'.$file;

}

}

// 判斷圖片總數(shù)

if(count($jpgs) != 52){

echo '圖片總數(shù)有誤:'.count($jpgs).'/52'.nl2br("\n");

die();

}

// 自然排序

usort($jpgs, "strnatcmp");

foreach($g_tasks as $page=>$photos){

$files = array();

foreach($photos as $r){

$files[] = $jpgs[$r];

}

$image_all = imagemake($files);

$filename = $page.'.jpg';

imagejpeg($image_all, $dst_path.'/'.$filename);

unset($files);

echo $filename.nl2br("\n");

}

echo 'ok'.nl2br("\n");

die();

/**

* 合成圖片

* @param array $images 本頁圖片集合

* @return resource 合成后的圖片

*/

function imagemake($files=array()){

global $g_width,$g_height,$g_models;

// 合成后的圖片

$image_all = imageCreatetruecolor($g_width,$g_height);

// 為真彩色畫布創(chuàng)建白色背景

$color = imagecolorallocate($image_all, 255, 255, 255);

imagefill($image_all, 0, 0, $color);

// imageColorTransparent($image_all, $color); // 背景透明

//function imagecopyresampled ($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h)

// 排版合成

$type = count($files);

switch($type){

case 2:

break;

case 1:

case 3:

case 4:

// 用于合成的圖片集

$images = array();

// 修正圖片

for($i=0;$i

$images[] = imagecropper($files[$i],$g_models[$type][$i]['w'],$g_models[$type][$i]['h']);

}

// 排版合成

for($i=0;$i

imagecopyresampled($image_all,$images[$i],

$g_models[$type][$i]['x'],$g_models[$type][$i]['y'],0,0,

$g_models[$type][$i]['w'],$g_models[$type][$i]['h'],imagesx($images[$i]),imagesy($images[$i]));

}

break;

default:

break;

}

return $image_all;

}

/**

* 修剪圖片:居中裁剪等比縮放

* @param $source_path 原圖路徑

* @param $target_width 目標寬度

* @param $target_height 目標高度

* @return bool|resource

*/

function imagecropper($source_path, $target_width, $target_height){

$source_info = getimagesize($source_path);

$source_width = $source_info[0];

$source_height = $source_info[1];

$source_mime = $source_info['mime'];

$source_ratio = $source_height / $source_width;

$target_ratio = $target_height / $target_width;

switch ($source_mime)

{

case 'image/gif':

$source_image = imagecreatefromgif($source_path);

break;

case 'image/jpeg':

$source_image = imagecreatefromjpeg($source_path);

break;

case 'image/png':

$source_image = imagecreatefrompng($source_path);

break;

default:

return false;

break;

}

// 橫豎構(gòu)圖不同,旋轉(zhuǎn)

if(($target_width-$target_height)*($source_width-$source_height)<0){

// 旋轉(zhuǎn)

$source_image = imagerotate($source_image, 90, 0);

$source_width = $source_info[1]; // [0]

$source_height = $source_info[0]; // [1]

$source_ratio = $source_height / $source_width;

}

// 源圖過高

if ($source_ratio > $target_ratio)

{

$cropped_width = $source_width;

$cropped_height = $source_width * $target_ratio;

$source_x = 0;

$source_y = ($source_height - $cropped_height) / 2;

}

// 源圖過寬

elseif ($source_ratio < $target_ratio)

{

$cropped_width = $source_height / $target_ratio;

$cropped_height = $source_height;

$source_x = ($source_width - $cropped_width) / 2;

$source_y = 0;

}

// 源圖適中

else

{

$cropped_width = $source_width;

$cropped_height = $source_height;

$source_x = 0;

$source_y = 0;

}

$target_image = imagecreatetruecolor($target_width, $target_height);

$cropped_image = imagecreatetruecolor($cropped_width, $cropped_height);

// 裁剪

imagecopy($cropped_image, $source_image, 0, 0, $source_x, $source_y, $cropped_width, $cropped_height);

// 縮放

imagecopyresampled($target_image, $cropped_image, 0, 0, 0, 0, $target_width, $target_height, $cropped_width, $cropped_height);

return $target_image;

}

PS:該代碼應(yīng)用于命令行項目,且需要注重圖片文件夾路徑。

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP圖形與圖片操作技巧匯總》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》及《PHP數(shù)學(xué)運算技巧總結(jié)》

希望本文所述對大家PHP程序設(shè)計有所幫助。

總結(jié)

以上是生活随笔為你收集整理的php 远程图片合拼,PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。