当前位置: 首页 > news >正文

网站开发网站制作报价单精美企业模板

网站开发网站制作报价单,精美企业模板,网站模板加盟代理,网站开发专业建设目录 前言 一、获取原图片对象信息 1、读取本地图片 2、读取网络图片 二、处理水印 三、添加水印 四、获取目标图片 五、完整工具类 六、结果展示 前言 现在很多人都喜欢在各种平台上分享自己的照片吧#xff0c;不管是一些制作出来的媒体图片还是精致的人像图片不管是一些制作出来的媒体图片还是精致的人像图片相信很多小伙伴都会这样。但同时也有一些让人担心的问题怕有一些人会随意转发图片或者盗图冒充本人。其实解决这个问题很简单只要发布之前给图片加个水印就行了。今天分享如何用Java实现添加水印的功能。 水印可以是图片或者文字操作方便。 java实现给图片添加水印实现步骤 获取原图片对象信息本地图片或网络图片 添加水印设置水印颜色、字体、坐标等 处理输出目标图片 一、获取原图片对象信息 获取图片的方式通常有两种 一种是通过下载到本地从本地读取本地图片 另外一种是通过网络地址进行读取网络图片 1、读取本地图片 通过代码实现读取本地目录下图片返回的是图片对象代码如下 /*** 读取本地图片** param path 本地图片存放路径*/public static Image readLocalPicture(String path) {if (null path) {throw new RuntimeException(本地图片路径不能为空);}// 读取原图片信息 得到文件File srcImgFile new File(path);try {// 将文件对象转化为图片对象return ImageIO.read(srcImgFile);} catch (IOException e) {throw new RuntimeException(e);}} 2、读取网络图片 /*** 读取网络图片** param path 网络图片地址*/public static Image readNetworkPicture(String path) {if (null path) {throw new RuntimeException(网络图片路径不能为空);}try {// 创建一个URL对象,获取网络图片的地址信息URL url new URL(path);// 将URL对象输入流转化为图片对象 (url.openStream()方法获得一个输入流)BufferedImage bugImg ImageIO.read(url.openStream());if (null bugImg) {throw new RuntimeException(网络图片地址不正确);}return bugImg;} catch (IOException e) {throw new RuntimeException(e);}} 二、处理水印 通过上面的步骤我们已经获取到了原始图片信息下面需要创建一个画笔进行水印的添加及处理。水印包含文字水印、图片水印。 画笔可以设置水印颜色、字体大小、字体样式等。 /*** 水印处理** param image 图片对象* param type 水印类型1-文字水印 2-图片水印* param watermark 水印内容文字水印内容/图片水印的存放路径*/public static void manageWatermark(Image image, Integer type, String watermark) {int imgWidth image.getWidth(null);int imgHeight image.getHeight(null);BufferedImage bufImg new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_RGB);// 加水印// 创建画笔Graphics2D graphics bufImg.createGraphics();// 绘制原始图片graphics.drawImage(image, 0, 0, imgWidth, imgHeight, null);// 校验水印的类型if (type 1) {if (StringUtils.isEmpty(watermark)) {throw new RuntimeException(文字水印内容不能为空);}// 添加文字水印// 根据图片的背景设置水印颜色graphics.setColor(new Color(255, 255, 255, 128));// 设置字体 画笔字体样式为微软雅黑加粗文字大小为45ptgraphics.setFont(new Font(微软雅黑, Font.BOLD, 45));// 设置水印的坐标(为原图片中间位置)int x (imgWidth - getWatermarkLength(watermark, graphics)) / 2;int y imgHeight / 2;// 画出水印 第一个参数是水印内容第二个参数是x轴坐标第三个参数是y轴坐标graphics.drawString(watermark, x, y);graphics.dispose();} else {// 添加图片水印if (StringUtils.isEmpty(watermark)) {throw new RuntimeException(图片水印存放路径不能为空);}Image srcWatermark readLocalPicture(watermark);int watermarkWidth srcWatermark.getWidth(null);int watermarkHeight srcWatermark.getHeight(null);// 设置 alpha 透明度alpha 必须是范围 [0.0, 1.0] 之内包含边界值的一个浮点数字graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.9f));// 绘制水印图片 坐标为中间位置graphics.drawImage(srcWatermark, (imgWidth - watermarkWidth) / 2,(imgHeight - watermarkHeight) / 2, watermarkWidth, watermarkHeight, null);graphics.dispose();}} getWatermarkLength() 方法用于计算水印内容的长度 /*** 获取水印文字的长度** param watermarkContent 文字水印内容* param graphics 图像类*/private static int getWatermarkLength(String watermarkContent, Graphics2D graphics) {return graphics.getFontMetrics(graphics.getFont()).charsWidth(watermarkContent.toCharArray(), 0, watermarkContent.length());} Font 字体说明 Font 类的构造函数为public Font(String familyName, int style, int size) 参数说明第一个参数为字体类型第二个参数为字体风格第三个参数为字体大小 字体的风格有 Font.PLAIN普通 Font.BOLD加粗 Font.ITALIC斜体 Font.BOLDFont.ITALIC粗斜体 PS 1、size字体大小默认单位是pt(磅)数字越大字就越大。 2、需要注意是水印坐标位置。设置不当就看不到水印效果。 三、添加水印 直接调用上面封装好的方法。 /*** 添加水印** param pictureType 图片来源类型1-本地图片 2-网络图片* param watermarkType 水印类型1-文字水印 2-图片水印* param path 图片路径* param watermark 水印内容文字水印内容/图片水印的存放路径*/public static void addWatermark(Integer pictureType, Integer watermarkType, String path, String watermark) {if (null pictureType) {throw new RuntimeException(图片来源类型不能为空);}if (null watermarkType) {throw new RuntimeException(水印类型不能为空);}Image image;if (pictureType 1) {// 读取本地图片image readLocalPicture(path);} else {// 读取网络图片image readNetworkPicture(path);}if (watermarkType 1) {// 添加文字水印manageWatermark(image, 1, watermark);} else {// 添加图片水印manageWatermark(image, 2, watermark);}} 四、获取目标图片 经过上面的操作后我们的图片添加文字水印或图片水印就已经处理完成了。但他现在还保存在Java对象中。 我们想要看得到效果需要进行处理保存图片到本地。 // 定义存储的地址String tarImgPath C:/Users/admin/Desktop/watermark.jpg;// 输出图片try {FileOutputStream outImgStream new FileOutputStream(tarImgPath);ImageIO.write(bufImg, png, outImgStream);outImgStream.flush();outImgStream.close();} catch (IOException e) {throw new RuntimeException(e);} 五、完整工具类 以上代码我直接整合成一个工具类。 import org.apache.commons.lang3.StringUtils;import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.URL;/*** 添加水印util*/ public class WatermarkUtil {/*** 读取本地图片** param path 本地图片存放路径*/public static Image readLocalPicture(String path) {if (null path) {throw new RuntimeException(本地图片路径不能为空);}// 读取原图片信息 得到文件File srcImgFile new File(path);try {// 将文件对象转化为图片对象return ImageIO.read(srcImgFile);} catch (IOException e) {throw new RuntimeException(e);}}/*** 读取网络图片** param path 网络图片地址*/public static Image readNetworkPicture(String path) {if (null path) {throw new RuntimeException(网络图片路径不能为空);}try {// 创建一个URL对象,获取网络图片的地址信息URL url new URL(path);// 将URL对象输入流转化为图片对象 (url.openStream()方法获得一个输入流)BufferedImage bugImg ImageIO.read(url.openStream());if (null bugImg) {throw new RuntimeException(网络图片地址不正确);}return bugImg;} catch (IOException e) {throw new RuntimeException(e);}}/*** 水印处理** param image 图片对象* param type 水印类型1-文字水印 2-图片水印* param watermark 水印内容文字水印内容/图片水印的存放路径*/public static String manageWatermark(Image image, Integer type, String watermark) {int imgWidth image.getWidth(null);int imgHeight image.getHeight(null);BufferedImage bufImg new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_RGB);// 加水印// 创建画笔Graphics2D graphics bufImg.createGraphics();// 绘制原始图片graphics.drawImage(image, 0, 0, imgWidth, imgHeight, null);// 校验水印的类型if (type 1) {if (StringUtils.isEmpty(watermark)) {throw new RuntimeException(文字水印内容不能为空);}// 添加文字水印// 根据图片的背景设置水印颜色graphics.setColor(new Color(255, 255, 255, 128));// 设置字体 画笔字体样式为微软雅黑加粗文字大小为45ptgraphics.setFont(new Font(微软雅黑, Font.BOLD, 45));// 设置水印的坐标(为原图片中间位置)int x (imgWidth - getWatermarkLength(watermark, graphics)) / 2;int y imgHeight / 2;// 画出水印 第一个参数是水印内容第二个参数是x轴坐标第三个参数是y轴坐标graphics.drawString(watermark, x, y);graphics.dispose();} else {// 添加图片水印if (StringUtils.isEmpty(watermark)) {throw new RuntimeException(图片水印存放路径不能为空);}Image srcWatermark readLocalPicture(watermark);int watermarkWidth srcWatermark.getWidth(null);int watermarkHeight srcWatermark.getHeight(null);// 设置 alpha 透明度alpha 必须是范围 [0.0, 1.0] 之内包含边界值的一个浮点数字graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.9f));// 绘制水印图片 坐标为中间位置graphics.drawImage(srcWatermark, (imgWidth - watermarkWidth) / 2,(imgHeight - watermarkHeight) / 2, watermarkWidth, watermarkHeight, null);graphics.dispose();}// 定义存储的地址String tarImgPath C:/Users/admin/Desktop/watermark.jpg;// 输出图片try {FileOutputStream outImgStream new FileOutputStream(tarImgPath);ImageIO.write(bufImg, png, outImgStream);outImgStream.flush();outImgStream.close();return 水印添加成功;} catch (IOException e) {throw new RuntimeException(e);}}/*** 添加水印** param pictureType 图片来源类型1-本地图片 2-网络图片* param watermarkType 水印类型1-文字水印 2-图片水印* param path 图片路径* param watermark 水印内容文字水印内容/图片水印的存放路径*/public static String addWatermark(Integer pictureType, Integer watermarkType, String path, String watermark) {if (null pictureType) {throw new RuntimeException(图片来源类型不能为空);}if (null watermarkType) {throw new RuntimeException(水印类型不能为空);}Image image;if (pictureType 1) {// 读取本地图片image readLocalPicture(path);} else {// 读取网络图片image readNetworkPicture(path);}if (watermarkType 1) {// 添加文字水印return manageWatermark(image, 1, watermark);} else {// 添加图片水印return manageWatermark(image, 2, watermark);}}/*** 获取水印文字的长度** param watermarkContent 文字水印内容* param graphics 图像类*/private static int getWatermarkLength(String watermarkContent, Graphics2D graphics) {return graphics.getFontMetrics(graphics.getFont()).charsWidth(watermarkContent.toCharArray(), 0, watermarkContent.length());}public static void main(String[] args) {// 本地图片路径String localPath C:/Users/admin/Desktop/bg.jpg;// 网络图片地址String networkPath https://img0.baidu.com/it/u3708545959,316194769fm253fmtautoapp138fPNG?w1000h1000;// 文字水印内容String textWatermark Hello World!;// 图片水印路径String pictureWatermark C:\\Users\\admin\\Desktop\\wm.jpg;// 本地图片 添加文字水印//addWatermark(1, 1, localPath,textWatermark);// 网络图片 添加文字水印//addWatermark(2, 1, networkPath, textWatermark);// 本地图片 添加图片水印//addWatermark(1, 2, localPath, pictureWatermark);// 网络图片 添加图片水印addWatermark(2, 2, networkPath, pictureWatermark);}}六、结果展示 1、本地图片文字水印 2、本地图片图片水印 3、网络图片文字水印 4、网络图片图片水印 如果这篇文章对您有所帮助或者有所启发的话求一键三连点赞、评论、收藏➕关注您的支持是我坚持写作最大的动力。
http://www.zqtcl.cn/news/384293/

相关文章:

  • 心悦dnf免做卡网站竞价恶意点击犯法吗
  • 企业网站的类型包括无锡专业网站建设
  • 手机版刷赞网站建设软文代写文案
  • 网站内容与目录结构色一把做最好的网站
  • 优化网站方法企业做网站属于广告宣传费吗
  • 站长之家alexa排名网站架构 seo
  • 四川智能网站建设制作建设网站代理
  • 对网站建设好学吗智慧企业解决方案
  • 网站建站平台eazyshoph5制作微信小程序
  • 扬中网站建设 优帮云望野古诗带拼音
  • 网站和discuz同步登录建设产品网站课程
  • 常州做网站多少钱图片链接在线生成器
  • 服务器网站打不开可以做哪些网站
  • 建设银行网站信息补充网站如何备份
  • 网站建设 杭州市萧山区网页此站点不安全
  • 微网站免费开发平台钟表珠宝商城网站建设
  • 帮建网站的人wordpress广告栏
  • 怎么学建网站教做甜品网站
  • 建网站 服务器需要安装 tomcat安徽城乡建设 厅网站
  • 建筑公司企业简介模板关于网站优化的文章
  • 绥化网站建设兼职互联网大厂设计哪家口碑好
  • 成交型网站建设公司六安亿联网络科技有限公司
  • 优秀行业网站广州网站建设怎么样
  • 南宁建设信息网seo推广公司排名
  • 凯发网站国外网站博客网站也可以做引流
  • 网站设计要学什么vestacp wordpress
  • 模板建站代理3免费做网站
  • 酒店官方网站的功能建设百度网盟推广案例
  • 屯昌网站建设wap网站搭建
  • 毕设做音乐网站重庆正云环境网页制作