图片添加水印,仿照水印相机样式,定位时间备注等

这篇具有很好参考价值的文章主要介绍了图片添加水印,仿照水印相机样式,定位时间备注等。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求:业务流程中,用户微信上传图片,展示的时候自动添加上水印(地址,时间,备注等信息)

  • 开发思路1、将每个元素添加分别单独到背景图片上,调整位置和透明度
  • 开发思路2、将水印信息先整合为一张水印图片,再将水印图片添加到背景图片,调整位置和透明度

因为考虑到不同图片尺寸大小等问题,元素内容又多,根据思路1,定位问题太麻烦,而且还因调整大小等因素,决定先整合为一张水印图片

1、参考水印相机,确认水印模板

本来水印图片打算全部用代码生成的,开发的过程中发现元素太多,背景色也上下分层,代码可以实现,但是ps更有性价比,于是打算先用ps画一个水印模板,然后在利用代码添加元素。

这个是参考模板,水印相机生成的照片(模仿他的样子开发,抄谁不会啊)
ps时间水印模板,php,图片,水印

这个是ps做的水印模板图片,这些元素固定,开发时只需要再增加时间,地点和备注信息。
ps时间水印模板,php,图片,水印

2、水印图片上添加时间、地点备注信息

添加文字水印,函数imagefttext需要用到字体,在电脑上C:\Windows\fonts里面黑体【simhei.ttf】,效果于水印图片上文字不一致,看了ps源文件,是Adobe 黑体 std字体,于是网上找了【AdobeHeitiStd-Regular.otf】(强迫症患者,要保持一致的嘛)。

$font_src = 'D:\php\wwwroot\127.0.0.1\device\font\AdobeHeitiStd-Regular.otf';
$image_logo_src = './image/logo.png';

$time = date('Y-m-d H:i:s');
$watermark_address = '上海市上海市上海上海馆';
$watermark_notes = '这是一个备注,这是一个备注,这是一个备注';

//创建水印图片
$image_logo = imagecreatefrompng($image_logo_src);
//获取水印尺寸
$image_logo_info = getimagesize($image_logo_src);
$image_logo_width = $image_logo_info[0];
$image_logo_height = $image_logo_info[1];

//设置字体颜色
$white = imagecolorallocate($image_logo, 255, 255, 255);
$blue = imagecolorallocate($image_logo, 100, 154, 222);

//根据位置往图片中写入文字
imagefttext( resource $image, float $size, float $angle,
              int $x, int $y, int $color, string $fontfile,
              string $text, array $extrainfo);
imagefttext($image_logo, 30, 0, 240, 155, $white, $font_src, $time);
imagefttext($image_logo, 38, 0, 200, 278, $blue, $font_src, $watermark_address);
imagefttext($image_logo, 20, 0, 150, 340, $blue, $font_src, $watermark_notes);

生成的水印照片,时间,地点和备注在添加的时候,用imagefttext来设置位置参数。

  • $image:它指定要处理的图像。
  • $size:它指定要使用的字体大小(以磅为单位)。
  • $angle:它以度为单位指定角度。
  • $x:它指定x坐标。
  • $y:它指定y坐标。
  • $color:它指定文本所需颜色的索引。
  • $fontfile:它指定要使用的字体。
  • $text:它指定要写入的文本。
  • $extrainfo (Optional):它指定了额外的信息。
    ps时间水印模板,php,图片,水印

3、创建背景图片

imagecreatefrom 系列函数用于从文件或 URL 载入一幅图像,成功返回图像资源,失败则返回一个空字符串。
如果imagecreatefrom后边跟照片类型,如果是jpg更换为jpeg

  • imagecreatefromgif():创建一块画布,并从 GIF 文件或 URL 地址载入一副图像
  • imagecreatefromjpeg():创建一块画布,并从 JPEG 文件或 URL 地址载入一副图像
  • imagecreatefrompng():创建一块画布,并从 PNG 文件或 URL 地址载入一副图像
  • imagecreatefromwbmp():创建一块画布,并从WBMP 文件或 URL 地址载入一副图像
  • imagecreatefromstring():创建一块画布,并从字符串中的图像流新建一副图像
$image_bg_src = './image/1.jpg';

$image_bg_info = getimagesize($image_bg_src);
$image_type = explode('/', $image_bg_info['mime'])[1];
$image_type = $image_type == 'jpg' ? 'jpeg' : $image_type;
$image_bg_width = $image_bg_info[0];
$image_bg_height = $image_bg_info[1];

$image_fun_info = "imagecreatefrom" . $image_type;
$image_canvas = $image_fun_info($image_bg_src);

4、水印调整格式

计算水印图片的宽高,理想情况下无论背景图片 大小、宽高 如果改变,水印只占据图片的左下角

  • 如果背景图片 宽>高,水印图片 宽 为背景图片的 0.5(自己看效果定),按照比例求出水印图片的高(新宽 / 旧宽 * 旧高)
  • 如果背景图片 高>宽,水印图片 高 为背景图片的 0.3(自己看效果定),按照比例求出水印图片的宽(新高 / 旧高 * 旧宽)

根据图片重新调整水印的大小

  • imagecopy() 拷贝图像资源的一部分
  • imagecopyresampled() 重采样拷贝部分图像并调整大小
  • imagecopyresized 拷贝部分图像并调整大小
imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
  • dst_image 目标图象连接资源。
  • src_image 源图象连接资源。
  • dst_x 目标 X 坐标点。
  • dst_y 目标 Y 坐标点。
  • src_x 源的 X 坐标点。
  • src_y 源的 Y 坐标点。
  • dst_w 目标宽度。
  • dst_h 目标高度。
  • src_w 源图象的宽度。
  • src_h 源图象的高度。
//计算比例
if ($image_bg_width > $image_bg_height) {
    $image_logo_height_new = round($image_bg_height * 0.3);
    $image_logo_width_new = round($image_logo_height_new / $image_logo_height * $image_logo_width);
    $offset = $image_bg_height * 0.03;
} else {
    $image_logo_width_new = round($image_bg_width * 0.5);
    $image_logo_height_new = round($image_logo_width_new / $image_logo_width * $image_logo_height);
    $offset = $image_bg_width * 0.03;
}
$image_logo_new = imagecreatetruecolor($image_logo_width_new, $image_logo_height_new);
imagecopyresampled($image_logo_new, $image_logo, 0, 0, 0, 0, $image_logo_width_new, $image_logo_height_new, $image_logo_width, $image_logo_height);

5、将水印放在背景图上

imagecopymerge()函数是一个强大的PHP图像处理函数,可以用于将两个图像合并到一个单一的图像中,并在混合时应用透明度。imagecopymerge()函数是通过按指定比例在两个图像之间绘制一个透明的GIF来实现的。

  • 如果背景图片 宽>高,水印图片距离左下角 左边 和 底部 的距离为 背景图片 高 的 3%(根据实际效果可微调)
  • 如果背景图片 高>宽,水印图片距离左下角 底部 和 左边 的距离为 背景图片 宽 的 3%(根据实际效果可微调)
imagecopymerge($image_canvas, $image_logo_new, $offset, $image_bg_height - $offset - $image_logo_height_new, 0, 0, $image_logo_width_new, $image_logo_height_new, 75);
#imagecopymerge( resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct )
  • dst_im 目标图像
  • src_im 被拷贝的源图像
  • dst_x 目标图像开始 x 坐标
  • dst_y 目标图像开始 y 坐标,x,y同为 0 则从左上角开始
  • src_x 拷贝图像开始 x 坐标
  • src_y 拷贝图像开始 y 坐标,x,y同为 0 则从左上角开始拷贝
  • src_w (从 src_x 开始)拷贝的宽度
  • src_h (从 src_y 开始)拷贝的高度
  • pct 图像合并程度,取值 0-100,当 pct=0 时,实际上什么也没做,反之完全合并.

6、全部代码和效果

  • 宽>高
    ps时间水印模板,php,图片,水印

  • 高>宽
    ps时间水印模板,php,图片,水印文章来源地址https://www.toymoban.com/news/detail-830677.html

$font_src = 'D:\php\wwwroot\127.0.0.1\device\font\AdobeHeitiStd-Regular.otf';
$time = date('Y-m-d H:i:s');
$image_logo_src = './image/logo.png';
$image_bg_src = './image/1.jpg';
$watermark_address = '上海市上海市上海上海馆';
$watermark_notes = '这是一个备注,这是一个备注,这是一个备注';

$image_bg_info = getimagesize($image_bg_src);
$image_type = explode('/', $image_bg_info['mime'])[1];
$image_type = $image_type == 'jpg' ? 'jpeg' : $image_type;
$image_bg_width = $image_bg_info[0];
$image_bg_height = $image_bg_info[1];

$image_fun_info = "imagecreatefrom" . $image_type;
$image_canvas = $image_fun_info($image_bg_src);

//创建一个图片
$image_logo = imagecreatefrompng($image_logo_src);

//创建logo
$image_logo_info = getimagesize($image_logo_src);
$image_logo_width = $image_logo_info[0];
$image_logo_height = $image_logo_info[1];

//设置字体颜色
$white = imagecolorallocate($image_logo, 255, 255, 255);
$blue = imagecolorallocate($image_logo, 100, 154, 222);

//往图片中写入文字
imagefttext($image_logo, 30, 0, 240, 155, $white, $font_src, $time);
imagefttext($image_logo, 38, 0, 200, 278, $blue, $font_src, $watermark_address);
imagefttext($image_logo, 20, 0, 150, 340, $blue, $font_src, $watermark_notes);

//计算比例
if ($image_bg_width > $image_bg_height) {
    $image_logo_height_new = round($image_bg_height * 0.3);
    $image_logo_width_new = round($image_logo_height_new / $image_logo_height * $image_logo_width);
    $offset = $image_bg_height * 0.03;
} else {
    $image_logo_width_new = round($image_bg_width * 0.5);
    $image_logo_height_new = round($image_logo_width_new / $image_logo_width * $image_logo_height);
    $offset = $image_bg_width * 0.03;
}
//改变水印的尺寸
$image_logo_new = imagecreatetruecolor($image_logo_width_new, $image_logo_height_new);
imagecopyresampled($image_logo_new, $image_logo, 0, 0, 0, 0, $image_logo_width_new, $image_logo_height_new, $image_logo_width, $image_logo_height);

//将水印放到图片的合适位置
imagecopymerge($image_canvas, $image_logo_new, $offset, $image_bg_height - $offset - $image_logo_height_new, 0, 0, $image_logo_width_new, $image_logo_height_new, 75);

header('Content-Type: image/' . $image_type);
$image_fun_out = "image" . $image_type;
$image_fun_out($image_canvas);

imagedestroy($image_canvas);
imagedestroy($image_logo);
imagedestroy($image_logo_new);

到了这里,关于图片添加水印,仿照水印相机样式,定位时间备注等的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python操作Word水印:添加文字或图片水印

    在Word文档中,可以添加半透明的图形或文字作为水印,以保护文档的原创性,防止未经授权的复制或使用。除了提供安全功能外,水印还可以展示文档创作者的信息、附加的文档信息,或者仅用于文档的装饰。本文将介绍如何使用 Spire.Doc for Python 在程序中的轻松 添加文字和

    2024年02月08日
    浏览(35)
  • 给图片添加水印

    2024年02月08日
    浏览(30)
  • Ueditor上传图片自动添加水印(通用图片文件)

    1、找到config.json,在配置文件中新增水印效果  2、找到php目录下的 action_uploads.php 文件 3、找到php同级目录下的类 uploadser.class.php    注意:以上代码会提示一个错误 imagealphablending() expects parameter 1 to be resource imagesavealpha() expects parameter 1 to be resource 在这个位置: 这个错误是因

    2024年02月12日
    浏览(40)
  • Moviepy模块之视频添加图片水印

    大家好,我是空空star,本篇给大家分享一下Moviepy模块之视频添加图片水印。 本篇使用的moviepy版本如下: Name: moviepy Version: 1.0.3 5.1 相对于视频的左上角 5.2 相对于视频的左下角 5.3 相对于视频的右上角 5.4 相对于视频的右下角 5.5 相对于视频的左中位置 5.6 相对于视频的正中位

    2023年04月08日
    浏览(28)
  • 一行Python代码给图片添加水印

    很多时候我们设计出一张精美的图片,但是一旦不加水印发到网上就会被他人抄袭,因此为了维护我们自身的版权,很多时候我们需要在一些图片或者视频中添加水印, 下面我将使用filestools模块分别在终端和python代码层面添加水印 。 1.下载ilestools模块 2.查看命令参数 在py

    2024年02月16日
    浏览(27)
  • ffmpeg在随机位置添加图片水印

     5秒添加一次 -i 输入的视频源 water.jpg放在跟视频一起的位置 temp.mp4是输出的视频

    2023年04月09日
    浏览(24)
  • Java实现视频与图片添加水印

    1、需要引入javacv依赖 2、代码实现

    2024年02月04日
    浏览(29)
  • 使用JavaScript给图片添加图片水印的前端实现方法

    当涉及图片处理时,JavaScript是一种强大的工具。在本篇博客中,我们将学习如何使用JavaScript来给图片添加水印,并将其封装成一个函数,以便在需要的时候重复使用。 在开始之前,确保你已经准备好了以下内容:         1.一张待添加水印的图片。         2.水印图片。

    2024年03月15日
    浏览(46)
  • Python代码学习之给图片添加文字或图片水印

    图片加水印有什么好处?在现今的数字化时代,网络上的图片泛滥,盗图现象也越来越严重。因此,在发布文章时,为了保护自己的原创作品版权,很多人选择使用水印来保护他们的图片。这样就能更好地做到: 1.版权保护:在商业用途的照片中添加水印可以帮助保护作者的

    2024年02月09日
    浏览(40)
  • 通过Python的PIL库给图片添加图片水印

    大家好,我是空空star,本篇给大家分享一下通过Python的PIL库给图片添加图片水印。 上一篇已经介绍过了PIL库是什么?安装PIL 、查看PIL版本,这里就不再介绍了。 这里我去C站首页找了一个,看起来是不是很酷。 7.1调整前 7.2调整后 8.1左上 8.2左下 8.3右上 8.4右下 8.5中间 其他位

    2023年04月19日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包