PHP将两张图片合成一张图片代码实例(源代码)

使用PHP将两张图片合成一张图片可以通过GD库来实现。下面是一个示例代码,展示如何将两张图片合成一张图片:

  1. 加载两张图片。
  2. 获取每张图片的宽度和高度。
  3. 创建一个新的空白图片,其宽度是两张图片宽度的和,高度是两张图片中较大的高度。
  4. 将第一张图片复制到新图片的左侧。
  5. 将第二张图片复制到新图片的右侧。
  6. 输出合成后的图片或者保存到文件。
    <?php
    // 加载两张图片
    $image1 = imagecreatefromjpeg('path/to/image1.jpg');
    $image2 = imagecreatefromjpeg('path/to/image2.jpg');
    
    // 获取图片的宽高
    $width1 = imagesx($image1);
    $height1 = imagesy($image1);
    
    $width2 = imagesx($image2);
    $height2 = imagesy($image2);
    
    // 创建一个新的图片,宽度为两张图片的宽度之和,高度为较大的那个
    $combined_width = $width1 + $width2;
    $combined_height = max($height1, $height2);
    
    $combined_image = imagecreatetruecolor($combined_width, $combined_height);
    
    // 将第一张图片复制到新图片上
    imagecopy($combined_image, $image1, 0, 0, 0, 0, $width1, $height1);
    
    // 将第二张图片复制到新图片上
    imagecopy($combined_image, $image2, $width1, 0, 0, 0, $width2, $height2);
    
    // 输出合成后的图片
    header('Content-Type: image/jpeg');
    imagejpeg($combined_image);
    
    // 保存合成后的图片到文件
    // imagejpeg($combined_image, 'path/to/combined_image.jpg');
    
    // 释放内存
    imagedestroy($image1);
    imagedestroy($image2);
    imagedestroy($combined_image);
    ?>
    

### 使用不同编程语言实现图片加水印 #### PHP 实现图片添加水印 在 PHP 中可以利用 GD 库轻松完成图像上的文字或另一幅图作为水印的效果。这里给出一段基于此库的具体操作实例: ```php <?php // 定义水印位置常量 define('IMAGE_WATER_BOTTOM_RIGHT', 1); // 右下角 function addWatermark($sourceImage, $watermarkPath, $outputFile){ list($srcWidth, $srcHeight) = getimagesize($sourceImage); // 获取原图类型并创建相应图像资源 switch(mime_content_type($sourceImage)){ case 'image/jpeg': $imgResource = imagecreatefromjpeg($sourceImage); break; case 'image/png': $imgResource = imagecreatefrompng($sourceImage); break; default: return false; // 不支持的文件格式 } // 加载水印图片 $wmImg = imagecreatefrompng($watermarkPath); // 计算放置坐标 $wmW = imagesx($wmImg); $wmH = imagesy($wmImg); $posX = $srcWidth - $wmH - 5; // 合成两张图片 imagecopymerge($imgResource, $wmImg, $posX, $posY, 0, 0, $wmW, $wmH, 70); // 输出合成后的图片至指定路径 imagejpeg($imgResource, $outputFile, 90); imagedestroy($imgResource); imagedestroy($wmImg); } ?> ``` 上述代码展示了如何读取原始图片与PNG格式透明背景的文字型水印,调整它们的位置关系并将二者融合在一起形成最终带水印的新版本JPEG格式照片[^1]。 #### Android 实现图片添加水印 对于移动应用开发而言,在安卓平台上也可以很方便地通过 `Canvas` 和 `Bitmap` 类来进行此类处理工作。下面是一份简化版Java类片段说明怎样在一个位图对象之上叠加一层文本形式的标记信息: ```java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bitmap originalBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.original_image); String watermarkText = "Sample Watermark"; int textColor = Color.WHITE; float textSize = 48f; Paint paint = new Paint(); Rect bounds = new Rect(); paint.setColor(textColor); paint.setTextSize(textSize); paint.getTextBounds(watermarkText, 0, watermarkText.length(), bounds); Canvas canvas = new Canvas(originalBitmap); int xPosition = (originalBitmap.getWidth() / 2) - (bounds.width() / 2); int yPosition = (originalBitmap.getHeight() * 3/4 ); canvas.drawText(watermarkText, xPosition , yPosition, paint); ImageView imageView = findViewById(R.id.imageView); imageView.setImageBitmap(originalBitmap); } } ``` 该段脚本主要负责加载一张本地存储的照片资源,并在其表面居中偏下的区域写入白色大号字体样式的版权声明字样[^2]。 #### C# 批量为多张图片添加相同水印 当面对大量待处理素材时,则可能更倾向于采用批量化作业模式。以下是C#环境下的一套解决方案框架,它能够一次性针对整个文件夹内的所有JPG格式影像实施统一规格化的标注动作: ```csharp using System.Drawing; using System.IO; class Program{ static void Main(string[] args){ string inputDir = @"D:\InputImages\"; string outputDir = @"D:\OutputImages\"; foreach(var file in Directory.GetFiles(inputDir,"*.jpg")){ using(Bitmap img = new Bitmap(file)) using(Graphics g = Graphics.FromImage(img)){ Font font = new Font("Arial", 24F, FontStyle.Bold); SolidBrush brush = new SolidBrush(Color.WhiteSmoke); SizeF size = g.MeasureString("Batch Watermark Text",font); PointF location = new PointF( img.Width-size.Width-10, img.Height-size.Height-10 ); g.DrawString("Batch Watermark Text",font,brush,location); File.WriteAllBytes(Path.Combine(outputDir, Path.GetFileName(file)), ((MemoryStream)new ImageConverter().ConvertTo(img,typeof(MemoryStream))).ToArray()); } } } } ``` 这段程序会扫描指定目录内所有的`.jpg`结尾文件名对应的实体,逐一对每一个执行打开、编辑(即附加固定文案)、另存新副本的操作流程直至全部结束为止[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值