首页 文章

缩放水印以适合父图像

提问于
浏览
3

我的照片尺寸各不相同,它们可以是横向,纵向或正方形,我需要为每张照片制作最适合的水印 - 所以我需要调整水印的宽度(没有Imagick),因为它是一个长矩形,所以身高无关紧要 .

我找到了PHP函数 imagecopyresized ,但是我'll be honest, I can'找出了我的情况所需的参数,即使在查看PHP文档之后!我也不确定在使用imagecopyresized后,我的其余功能将在获得水印宽度和高度的地方工作 .

有人可以帮助我超越终点线 . 这是我得到了多远,它需要的是添加到 imagecopyresized 部分的正确参数:

<?php

header('content-type: image/jpeg');

$image = imagecreatefromjpeg('https://.....jpg');
$imageSize = getimagesize('https://.....jpg');

$newWatermarkWidth = $imageSize[0]-50; // width of image minus 50px
$watermark = imagecreatefrompng('watermark.png');

// resize watermark to newWatermarkWidth here with imagecopyresize
$watermark = imagecopyresized(?,?,?,?);

$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);

$dest_x = ($imageSize[0]/2) - ($watermark_width/2) ;
$dest_y = ($imageSize[1]/2) - ($watermark_height/2);

imagecopy($image, $watermark, round($dest_x,0), round($dest_y,0), 0, 0, $watermark_width, $watermark_height);
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);

?>

THIS IS WHAT I ENDED WITH & WORKS PERFECTLY

一个脚本,用于调整水印宽度以适应整个父图像,居中且成比例 .

<?php
header('content-type: image/jpeg');

$image = imagecreatefromjpeg('http://mydomain.com/myPhoto.jpg');
$imageSize = getimagesize('http://mydomain.com/myPhoto.jpg');

$watermark = imagecreatefrompng('http://mydomain.com/myWatermark.png');

$watermark_o_width = imagesx($watermark);
$watermark_o_height = imagesy($watermark);

$newWatermarkWidth = $imageSize[0]-20;
$newWatermarkHeight = $watermark_o_height * $newWatermarkWidth / $watermark_o_width;

imagecopyresized($image, $watermark, $imageSize[0]/2 - $newWatermarkWidth/2, $imageSize[1]/2 - $newWatermarkHeight/2, 0, 0, $newWatermarkWidth, $newWatermarkHeight, imagesx($watermark), imagesy($watermark));

imagejpeg($image);

imagedestroy($image);
imagedestroy($watermark);

1 回答

  • 2

    这会调整水印的大小并直接复制到图像 .

    您不再需要现有的imagecopy线 .

    $success = imagecopyresized($image,                 // Destination image
               $watermark,                              // Source image
               $imageSize[0]/2 - $newWatermarkWidth/2,  // Destination X
               $imageSize[1]/2 - imagesy($watermark)/2, // Destination Y
               0,                                       // Source X
               0,                                       // Source Y
               $newWatermarkWidth,                      // Destination W
               imagesy($watermark),                     // Destination H
               imagesx($watermark),                     // Source W
               imagesy($watermark));                    // Source H
    

相关问题