【php】图片水印处理

注:最后有面试挑战,看看自己掌握了吗

文章目录

  • 图片水印处理
    • 一、简单图片水印
    • 二、做一个智能的图片水印函数

🍃博主昵称:一拳必胜客
🌸博主寄语:欢迎点赞收藏关注哦,一起成为朋友一起成长;
 特别鸣谢:木芯工作室
特别鸣谢:木芯工作室 、Ivan from Russia


图片水印处理

生成水印是整个技术里面最简单的一步**。定位水印位置的时候涉及到一点点**、最初浅的几何知识。

而上一章我们学习了图片的裁剪技术。水印只不过是图片裁剪技术的一点点的小变形的体现。

一点点几何上的重点知识:

1.图片大小2.图片放在哪个坐标上3.图片的宽高

图片水印技术的核心相当于是两张图片一张大图;一张小图。将小图放置在大图的某个位置上。

水印技术是这个里面最为简单的一个技术,实现方式:

1.打开原图(也叫操作的目标图片)2.打开水印图(也叫水印来源图片)3.使用 imagecopymerge 将小图合并至大图的指定位置4.输出图片.5销毁资源

一、简单图片水印

最主要的是要使用这个函数:

bool imagecopymerge ( resource $目标图片 , resource $来源图片, int $目标开始的x , int $目标开始的y, int $来源的x , int $来源的y , int $来源的宽 , int $来源的高 , int $透明度)

注意:
透明度的值为0-100的整数。imagecopy和imagecopymerge的区别在于一个有透明度,一个没有透明度。

按照总结的步骤,做一个简单的方法:

<?php
//打开目标图片
$dst = imagecreatefrompng('/upload/course/000/000/002/5833ebba648cf229.png');//打开Logo来源图片
$src = imagecreatefrompng('/upload/course/000/000/002/5833ebe90cc11285.png');//得到目标图片的宽高
$dst_info = getimagesize('5833ebba648cf229.png');//得到logo图片的宽高
$src_info = getimagesize('5833ebe90cc11285.png');//放到最右下脚可得出图片水印图片需要开始的位置即:
//x点位置:需要大图的宽 - 小图的宽;
//y点位置:放大图的高 - 小图的高$dst_x = $dst_info[0] - $src_info[0];$dst_y = $dst_info[1] - $src_info[1];//要将图片加在右下脚
imagecopymerge($dst, $src, $dst_x, $dst_y, 0, 0, $src_info[0], $src_info[1], 100);header('Content-type:image/png');
imagepng($dst);imagedestroy($dst);imagedestroy($src);?>

二、做一个智能的图片水印函数

一、 我们可以做一个自动化打开图片的函数

之前创建图片或者打开图片的函数我们都学习过:

1.imagecreate2.imagecreatetruecolor3.imagecreatefromjpeg等

我们来推理下下。我们如果能够想办法得到图片的MIME类型,根据MIME类型找到打开该文件的函数就行了。

因此,做这一步分为两块来完成:

1.得到文件MIME类型,返回类型。

2.传入路径,打开函数,返回资源。

因此,上面两块,我们都可以做成两个函数。

传入图片的路径,将图片的宽、高、图片的MIME类型全部返回一个数组,需要的时候使用对应的参数即可。

我们可以将mime类型传到到$data当中的type关联数组中。代码如下:

function getImageInfo($path) {$info = getimagesize($path);$data['width'] = $info[0];$data['height'] = $info[1];$data['type'] = $info['mime'];return $data;
}

打开文件的函数,传入一个图片的类型,传入一个图片的路径就打开了图片,返回成了资源类型。

下面的例子中,$type使用swithc…case进行判断,如果是imagejpeg就使用imagecreatefromjpeg来打开$path中路径指定的文件。最后,返回一个资源类型。

function openImg($path, $type) {switch ($type) {case 'image/jpeg':case 'image/jpg':case 'image/pjpeg':$img = imagecreatefromjpeg($path);break;case 'image/png':case 'image/x-png':$img = imagecreatefrompng($path);break;case 'image/gif':$img = imagecreatefromgif($path);break;case 'image/wbmp':$img = imagecreatefromwbmp($path);break;default:exit('图片类型不支持');}return $img;
}

自动计算位置

我们可将位置分为10个值,分别为0-9。

注:
0为随机位置,可出现在页面中的任意处。但是不能超过图片的范围。

0的位置为:

x = 0 至 (大图宽 - 小图宽) y = 0 至 (大图高 - 小图高) 1的位置为:

x = 0 y = 0 2的位置为:

x = (大图宽 - 小图宽) /2 y = 0 3的位置为:

x = 大图宽 - 小图宽 y = 0 4的位置为:

x = 0 y = (大图高 - 小图高) / 2 … …依此类推。

我们来推理0-9的实现代码:

switch($pos){case 1:$x=0;$y=0;break;case 2:$x=ceil(($info['width']-$logo['width'])/2);$y=0;break;case 3:$x=$info['width']-$logo['width'];$y=0;break;case 4:$x=0;$y=ceil(($info['height']-$logo['height'])/2);break;case 5:$x=ceil(($info['width']-$logo['width'])/2);$y=ceil(($info['height']-$logo['height'])/2);break;case 6:$x=$info['width']-$logo['width'];$y=ceil(($info['height']-$logo['height'])/2);break;case 7:$x=0;$y=$info['height']-$logo['height'];break;case 8:$x=ceil(($info['width']-$logo['width'])/2);$y=$info['height']-$logo['height'];break;case 9:$x=$info['width']-$logo['width'];$y=$info['height']-$logo['height'];break;case 0:default:$x=mt_rand(0,$info['width']-$logo['width']);$y=mt_rand(0,$y=$info['height']-$logo['height']);break;}

最后调用一下图片的合并、输出和销毁代码即可:

imagecopymerge($dst,$src,$x,$y,0,0,$logo['width'],$logo['height'],$tm);

我们将最终的代码整合好后给大家实验看效果:

<?phpwater('/upload/course/000/000/002/5833ebba648cf229.png','/upload/course/000/000/002/5833ebe90cc11285.png',0,50);function water($img,$water,$pos=9,$tm=100){$info=getImageInfo($img);$logo=getImageInfo($water);$dst=openImg($img,$info['type']);$src=openImg($water,$logo['type']);switch($pos){case 1:$x=0;$y=0;break;case 2:$x=ceil(($info['width']-$logo['width'])/2);$y=0;break;case 3:$x=$info['width']-$logo['width'];$y=0;break;case 4:$x=0;$y=ceil(($info['height']-$logo['height'])/2);break;case 5:$x=ceil(($info['width']-$logo['width'])/2);$y=ceil(($info['height']-$logo['height'])/2);break;case 6:$x=$info['width']-$logo['width'];$y=ceil(($info['height']-$logo['height'])/2);break;case 7:$x=0;$y=$info['height']-$logo['height'];break;case 8:$x=ceil(($info['width']-$logo['width'])/2);$y=$info['height']-$logo['height'];break;case 9:$x=$info['width']-$logo['width'];$y=$info['height']-$logo['height'];break;case 0:default:$x=mt_rand(0,$info['width']-$logo['width']);$y=mt_rand(0,$y=$info['height']-$logo['height']);break;}imagecopymerge($dst,$src,$x,$y,0,0,$logo['width'],$logo['height'],$tm);imagejpeg($dst);imagedestory($dst);imagedestory($src);}function openImg($path,$type){switch($type){case 'image/jpeg':case 'image/jpg':case 'image/pjpeg':$img=imagecreatefromjpeg($path);break;case 'image/png':case 'image/x-png':$img=imagecreatefrompng($path);break;case 'image/gif':$img=imagecreatefromgif($path);break;case 'image/wbmp':$img=imagecreatefromwbmp($path);break;default:exit('图片类型不支持');}return $img;}?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33809.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样在图片上添加水印?这份水印处理教程快来收好

不管是自己设计的海报&#xff0c;还是摄影作品&#xff0c;在发布到平台之前&#xff0c;我们都很有必要为图片加上自己的水印&#xff0c;以此保护其不被他人恶意盗取。可能还有些小伙伴不知道图片如何加水印&#xff0c;没关系&#xff0c;下面我给大家分享几个实用方法&…

图片隐写,盲水印,加密logo

1.定义 隐写术算是一种加密技术&#xff0c;权威的 wiki 说法是“ 隐写术是一门关于信息隐藏的技巧与科学&#xff0c;所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容。” example&#xff1a; 钱图&#xff08;钱上面的水印&#xff0…

工具分享:图片水印工具(WaterMarker)

给大家分享个水印工具&#xff0c;由于公司不能装第三方工具。没办法&#xff0c;只能自己做个工具来用用。该工具的效果如下&#xff1a; 程序界面 配置水印信息 预览水印效果 图片处理状态 被打上水印后的效果 源码下载 CodePlex

不知道图片添加水印软件有哪些?推荐这三款给图片加水印的软件

各位画手大大有没有遇到过这种情况&#xff0c;自己好不容易画好的稿子想发布到一些网络平台上引流&#xff0c;但是图片又很容易被盗用&#xff0c;这个时候我们需要借助一些软件给自己的画稿加上自己的水印防止被盗&#xff0c;那你知道图片添加水印软件有哪些吗&#xff1f;…

张朝阳挺了过来

2017年第四届世界互联网大会期间的张朝阳 本文写于2002年。 2002年1月10日晚&#xff0c;北京恭王府内高朋满座&#xff0c;搜狐2001十大新闻颁奖典礼正在这里进行。重新看到久违的隆重场面&#xff0c;张朝阳无法抑制住自己的兴奋&#xff0c;他说&#xff1a;“如果北京有上流…

张朝阳与二马或其他

张朝阳手推质能方程 没地方继续推导了&#xff0c;擦黑板前还要感慨一句“不忍心擦掉”。 张朝阳1993年底在美国麻省理工学院&#xff08;MIT&#xff09;获得了博士学位&#xff0c;并在MIT从事博士后研究。 毕业这么多年了&#xff0c;当初学的东西&#xff0c;还能以这种…

腾讯会议如何使用讲演者模式进行汇报(nian gao)

腾讯会议如何使用讲演者模式进行汇报&#xff08;nian gao&#xff09; 首先列出步骤&#xff0c;再一一演示&#xff1a; altf5 开启讲演者模式&#xff0c;调整讲演者模式的窗口为小窗alttab 切换回腾讯会议界面&#xff0c;屏幕共享power point窗口&#xff08;注意不是“…

python 股票量化盘后分析系统V0.47

前言&#xff1a;先放效果图 关于stock_backtrader.py这个代码文件&#xff0c;可能由于代码逻辑判断跟条件语句太多&#xff0c;当你在这个编辑代码界面时&#xff0c;CPU占用异常高&#xff0c;估计是pycharm的语法检查功能导致的&#xff0c;当然估计也有一部分是我写的代…

追击涨停板-支持A股每日涨停分析。股票量化分析工具QTYX-V2.3.8

前言 目前A股市场的股票每天是有限制最大涨幅的&#xff0c;也就是涨停的概念。比如主板个股最大涨幅是10%&#xff0c;创业板个股最大涨幅是20%等。 对于个股而言并不是随随便便就能被推到涨停板的。或是因为股票发生了重大的利好&#xff08;资产重组、政策利好、业绩暴增等&…

python股票量化交易(8)---K线图:锤头,射击之星,早晨之星

人之有志&#xff0c;如树之有根&#xff0c;立定此志&#xff0c;须念念谦虚&#xff0c;尘尘方便&#xff0c;自然感动天地&#xff0c;而造福由我。 目录 锤头倒锤头射击之星早晨之星 锤头 本篇接着上篇介绍K线形态。 首先&#xff0c;我们今天介绍的第一个K线形态是锤头&…

每日股市大盘自动复盘(基于聚宽量化投资平台)

直接上代码&#xff0c;代码里需要用到聚宽平台的jqdata&#xff0c;可在聚宽研究环境中运行。 import numpy as np import datetime import jqdata from jqdata import * import pandas as pd import matplotlib.pyplot as plt import json #字符转换 matplotlib.r…

复盘股票问题

通过leetcode上的几道经典的股票问题&#xff0c;我们由浅入深地认识到动态规划的精妙之处&#xff0c;下面我们来复盘一下股票问题的解题思路&#xff0c;看我们是如何抽丝剥茧&#xff0c;一步一步地逼近正确思路&#xff0c;迎来柳暗花明的。 首先还是老生常谈的问题&#…

基于qstock的量化复盘与自动盯盘

01 引言 qstock量化分析库和教程自发布以来已经有一段时间了。收到不少读者的反馈&#xff0c;希望在qstock上添加更多的实用功能和案例研究。在回应这些反馈的同时&#xff0c;公众号也一直在努力改进现有的功能和教程内容。我们的目标是为用户提供更全面、更实用、更易于理解…

腾讯 Angel Graph 图计算框架在智能风控中的应用

本文约6800字&#xff0c;建议阅读15分钟 本文为你分享腾讯的姜亚松老师的图计算框架Angel Graph。 [ 导读 ] 图计算在智能风控场景有着广泛的应用&#xff0c;但是图的规模和计算的复杂度往往会制约落地的使用&#xff0c;目前各家机构都开展了图计算框架的自研&#xff0c;来…

金融风控数据分析

一、信贷底层库表详解与数据集市构建 1.信贷业务底层数据核心库表穿透式详解 1&#xff09;客户信息表结构与数据&#xff08;customer_info&#xff09; 客户信息表是根据客户在前端申请信贷产品时主动填写的信息收集的&#xff0c;部分可验证字段可直接用于风控规则&#…

python金融风控评分卡模型和数据分析(加强版)

在公众号「python风控模型」里回复关键字&#xff1a;学习资料 扣扣学习群&#xff1a;1026993837 领学习资料 金融风控模型和数据分析很难&#xff1f;逻辑回归评分卡/catboost/xgboost/lightgbm/等模型用python一次全部搞定&#xff01;增加数据分析和数据可视化实战&#xf…

python金融风控评分卡模型和数据分析(加强版)-收藏

信用评分卡 信用评分是指根据银行客户的各种历史信用资料&#xff0c;利用一定的信用评分模型&#xff0c;得到不同等级的信用分数&#xff0c;根据客户的信用分数&#xff0c;授信者可以通过分析客户按时还款的可能性&#xff0c;据此决定是否给予授信以及授信的额度和利率。 …

风控建模一、初步认识风控

风险控制&#xff08;Risk Control)&#xff0c;简称风控&#xff0c;是互联网金融的核心。 一、基础知识 1.1 A/B/C卡 A卡&#xff08;Application score card&#xff09;即申请评分模型&#xff08;贷款前&#xff09;&#xff0c;用于预测申请时点&#xff08;申请信用卡…

全面了解风控指标体系

说明 风险管理主要分为四大部分&#xff1a;风险识别、风险分析、风险监控、风险应对。而在量化风险管理的今天&#xff0c;这四个风控部分全都离不开风险指标的梳理、判断、追踪。在信贷业务中&#xff0c;常见贷款流程为&#xff1a;**申请>审批>签约放款>贷后管理…

风控报表体系建设与风控指标

文章目录 风控报表体系建设贷中&#xff1a;监控贷中&#xff1a;资产质量报表贷后&#xff1a;审批监控贷后&#xff1a;拒绝原因分布贷后&#xff1a;用户特征监控贷后&#xff1a;模型监控催收业绩表催收效率表一、应收账款(含销账)(Account Receivable, AR)二、期末贷款余额…