Java多种方式向图片添加自定义水印、图片转换及webp图片压缩
给个创建水印的示例:
/*** 获取水印** @param watermarkText 水印文字* @return 水印bufferimage*/public static BufferedImage getWatermark(String watermarkText) {BufferedImage measureBufferdImage = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);Graphics2D measureG2d = measureBufferdImage.createGraphics();measureG2d.setFont(new Font("SimSun", Font.BOLD, 32));Rectangle2D rectangle2D = measureG2d.getFontMetrics().getStringBounds(watermarkText, null);measureG2d.dispose();int width = (int) (rectangle2D.getWidth() + 50);int height = (int) (rectangle2D.getHeight() + 50);// 创建一个 BufferedImage 对象BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);// 获取 Graphics2D 对象Graphics2D g2d = image.createGraphics();// 设置背景色g2d.setColor(new Color(0, 0, 0, 0));g2d.fillRect(0, 0, width, height);Color customColor = new Color(255, 0, 0, 50); // 半透明红色// 设置文字颜色和字体g2d.setColor(customColor);g2d.setFont(new Font("SimSun", Font.BOLD, 32));g2d.drawString(watermarkText, 25, height / 2 + 12);// 释放资源g2d.dispose();return image;}
这样可以根据一个字符串的文字生成一个水印图片
利用imageio压缩转换图片并且直接添加水印
public static File compressToWebp(File sourceImage, String watermarkText) throws IOException {BufferedImage image = ImageIO.read(new FileInputStream(sourceImage));if (StringUtils.isNotBlank(watermarkText)) {Graphics2D g2d = image.createGraphics();g2d.setFont(new Font("SimSun", Font.BOLD, 32));Rectangle2D rectangle2D = g2d.getFontMetrics().getStringBounds(watermarkText, null);int width = (int) (rectangle2D.getWidth() + 50);int height = (int) (rectangle2D.getHeight() + 50);// 设置背景色g2d.setColor(new Color(0, 0, 0, 0));Color customColor = new Color(255, 0, 0, 50); // 半透明红色// 设置文字颜色和字体g2d.setColor(customColor);g2d.setFont(new Font("SimSun", Font.BOLD, 32));g2d.drawString(watermarkText, (int) (image.getWidth() - width), image.getHeight() - height-25);// 释放资源g2d.dispose();}// Obtain a WebP ImageWriter instanceImageWriter writer = ImageIO.getImageWritersByMIMEType("image/webp").next();// Configure encoding parametersWebPWriteParam writeParam = new WebPWriteParam(writer.getLocale());writeParam.setCompressionMode(WebPWriteParam.MODE_DEFAULT);File file = new File("d:/test.webp");FileImageOutputStream fileImageOutputStream = new FileImageOutputStream(file);// Configure the output on the ImageWriterwriter.setOutput(fileImageOutputStream);// Encodewriter.write(null, new IIOImage(image, null, null), writeParam);fileImageOutputStream.flush();fileImageOutputStream.close();return file;}
将webp图片转为png图片
public static File webpToPng(File sourceImage) throws IOException {// 读取webp格式图片BufferedImage image = ImageIO.read(sourceImage);// 写入png格式图片File pngFile = new File("d:/test.png");ImageIO.write(image, "png", pngFile);System.out.println("转换完成!");return pngFile;}
利用Thumbnails添加水印
Thumbnails.of(new File("D:/20231108011418994.jpg")).outputFormat("png").sourceRegion(Positions.BOTTOM_RIGHT, 200, 100).size(200, 100).keepAspectRatio(false).crop(Positions.BOTTOM_CENTER).watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("D:/20231019193150520-bc.png")), 0.7f).toOutputStream(new FileOutputStream(new File("D:/20231108011418994-b.jpg")));
20231019193150520-bc.png是水印图片
相关maven包参考
<dependency><groupId>com.github.nintha</groupId><artifactId>webp-imageio-core</artifactId><version>0.1.0</version><scope>system</scope><systemPath>${project.basedir}/libs/webp-imageio-core-0.1.0.jar</systemPath></dependency>
<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.20</version></dependency>
相关文章:
Java多种方式向图片添加自定义水印、图片转换及webp图片压缩
给个创建水印的示例: /*** 获取水印** param watermarkText 水印文字* return 水印bufferimage*/public static BufferedImage getWatermark(String watermarkText) {BufferedImage measureBufferdImage new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB…...
基于Pytorch框架的LSTM算法(二)——多维度单步预测
1.项目说明 **选用Close和Low两个特征,使用窗口time_steps窗口的2个特征,然后预测Close这一个特征数据未来一天的数据 当batch_firstTrue,则LSTM的inputs(batch_size,time_steps,input_size) batch_size len(data)-time_steps time_steps 滑动窗口&…...
cnn感受野计算方法
No. Layers Kernel Size Stride 1 Conv1 33 1 2 Pool1 22 2 3 Conv2 33 1 4 Pool2 22 2 5 Conv3 33 1 6 Conv4 33 1 7 Pool3 2*2 2 感受野初始值 l 0 1 l_0 1l 0 1,每层的感受野计算过程如下: l 0 1 l_0 1l 0 1 l 1 1 ( 3 − 1 ) 3 l_1 1…...
百分点科技受邀参加“第五届治理现代化论坛”
11月4日,由北京大学政府管理学院主办的“面向新时代的人才培养——第五届治理现代化论坛”举行,北京大学校党委常委、副校长、教务长王博,政府管理学院院长燕继荣参加开幕式并致辞,百分点科技董事长兼CEO苏萌受邀出席论坛…...
基于Springboot的智慧食堂设计与实现(有报告)。Javaee项目,springboot项目。
演示视频: 基于Springboot的智慧食堂设计与实现(有报告)。Javaee项目,springboot项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 项…...
「Verilog学习笔记」多功能数据处理器
专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 分析 注意题目要求输入信号为有符号数,另外输出信号可能是输入信号的和,所以需要拓展一位,防止溢出。 timescale 1ns/1ns module data_…...
OpenHarmony 4.0 Release 编译异常处理
一、环境配置 编译环境:Ubuntu 20.04 OpenHarmony 软件版本:4.0 Release 设备平台:rk3568 二、下拉代码 参考官网步骤: OpenHarmony 4.0 Release 源码获取 repo init -u https://gitee.com/openharmony/manifest -b OpenHarmo…...
软件测试|MySQL LIKE:深入了解模糊查询
简介 在数据库查询中,模糊查询是一种强大的技术,可以用来搜索与指定模式匹配的数据。MySQL数据库提供了一个灵活而强大的LIKE操作符,使得模糊查询变得简单和高效。本文将详细介绍MySQL中的LIKE操作符以及它的用法,并通过示例演示…...
linux防火墙设置
#查看firewall的状态 firewall-cmd --state (systemctl status firewalld.service) #安装 yum install firewalld #启动, systemctl start firewalld (systemctl start firewalld.service) #设置开机启动 systemctl enable firewalld #关闭 systemctl stop firewalld #取消…...
http 403
一、什么是HTTP ERROR 403 403 Forbidden 是HTTP协议中的一个状态码(Status Code)。可以简单的理解为没有权限访问此站,服务器受到请求但拒绝提供服务。 二、HTTP 403 状态码解释大全 403.1 -执行访问禁止。 403.2 -读访问禁止。 403.3 -写访问禁止。 403.4要…...
RAW图像处理软件Capture One 23 Enterprise mac中文版功能特点
Capture One 23 Enterprise mac是一款专业的图像处理软件,旨在为企业用户提供高效、快速和灵活的工作流程。 Capture One 23 Enterprise mac软件的特点和功能 强大的图像编辑工具:Capture One 23 Enterprise提供了一系列强大的图像编辑工具,…...
Linux 进程终止和等待
目录 一:进程常见的退出方法 1. main 函数返回值 2.调用 exit 3.调用 _exit 二:异常问题 三:进程等待 1.概念 2.进程等待的必要性 3.进程等待的方法 <1>:wait --- 系统调用 <2>:waitpid 进程…...
python用tkinter随机数猜数字大小
python用tkinter随机数猜数字大小 没事做,看到好多人用scratch做的猜大小的示例,也用python的tkinter搞一个猜大小的代码玩玩。 猜数字代码 from tkinter import * from random import randint# 定义确定按钮的点击事件 def hit(x,y):global s_Labprint(…...
程序员们保住自己饭碗
在现代社会中,程序员扮演着至关重要的角色。他们不仅仅是编写代码的人,更是保障数字世界安全稳定的守护者。随着科技的迅猛发展,程序员保住自己饭碗的护城河变得愈发重要。本文将探讨程序员如何通过不断学习、技术创新和软实力的发展…...
顶板事故防治vr实景交互体验提高操作人员安全防护技能水平
建筑业在我国各行业中属危险性较大且事故多发的行业,在建筑业“八大伤害”(高处坠落、坍塌、物体打击、触电、起重伤害、机械伤害、火灾爆炸及其他伤害)事故中,高处坠落事故的发生率最高、危险性极大。工地现场培训vr坠落体验利用虚拟现实技术还原各种情…...
为什么推荐从Linux开始了解IT技术
IT是什么,是干什么的呢? 说起物联网,云计算,大数据,或许大家听过。但是,你知道,像云计算的底层基座是什么呢?就是我们现在说的Linux操作系统。而云计算就是跑在Linux操作系统上的一个…...
【Mysql】增删改查(基础版)
我使用的工具是Data Grip (SQLyog Naivact 都行) 使用Data Grip创建student表,具体步骤如下(熟悉Data Grip或者使用SQLyog,Naivact可以跳过) https://blog.csdn.net/m0_67930426/article/details/13429…...
文件夹找不到了怎么恢复?4个正确恢复方法分享!
“我在电脑上保存了很多的文件和文件夹,今天在查找文件时,发现我有一整个文件夹都消失了,不知道怎么才能找到呢。有朋友可以帮帮忙吗?” 电脑中文件夹突然找不到了可能会引发焦虑,尤其是如果这些文件夹包含重要的数据。…...
迅为RK3568开发板GPS模块测试实验步骤
1 首先按照上个实验-串口实验,在设备树中打开串口 9 的节点。 2 然后将 GPS 模块连接好之后,用 U 盘将 GPS 测试程序 gps_test 拷贝到开发板的/mnt 目录下。本小节的测试程序存放路径为“iTOP-3568 开发板\02_ 【iTOP-RK3568 开发板】开发资…...
用趋动云GPU部署自己的Stable Diffusion
注:本文内容来自于对DataWhale的开源学习项目——免费GPU线上跑AI项目实践的学习,参见:Docs,引用了多处DataWhale给出的教程。 1.创建项目 1)进入趋动云用户工作台,在当前空间处选择注册时系统自动生成的…...
超实用 AI 教材写作指南:借助工具轻松完成教材创作,低查重有保障!
许多教材编写者常常感到遗憾,尽管他们投入大量时间去打磨正文内容,却由于缺少配套资源而影响了整体的教学效果。课后练习通常需要设计多样化的题型,但缺乏创新思路;教学幻灯片希望做到形象生动,但技术能力不足…...
告别纯Client模式:手把手教你用CANoe的NetWork Node搭建一个实时监控Server
从被动监听转向主动响应:基于CANoe NetWork Node的车载实时监控系统实战 在传统车载网络测试中,工程师们往往将CANoe作为被动监听工具,通过Trace窗口观察总线数据流。这种"只读"模式虽然能满足基础测试需求,但当面对需要…...
告别Function模块!手把手教你用Simulink DLL为Cruise搭建更复杂的能量回收策略
告别Function模块:CruiseSimulink联合仿真实现高阶能量回收策略 当你在Cruise中构建的能量回收策略开始变得复杂,Function模块的局限性是否让你感到束手束脚?代码冗长、信号管理混乱、调试困难——这些问题在开发复杂控制策略时尤为突出。本文…...
用STM32F103RCT6驱动4寸ST7796S屏,从接线到显示图片的保姆级教程
STM32F103RCT6驱动4寸ST7796S液晶屏全流程实战指南 第一次拿到STM32开发板和4寸液晶屏时,看着密密麻麻的引脚和陌生的专业术语,确实容易让人望而生畏。但别担心,本文将手把手带你完成从硬件连接到软件调试的全过程。不同于简单的代码复制粘贴…...
从部署视角看模型优化:如何用PyTorch Profiler和thop分析,让你的模型在边缘设备上跑得更快
从部署视角看模型优化:如何用PyTorch Profiler和thop分析,让你的模型在边缘设备上跑得更快 边缘计算设备的算力限制常常成为AI模型落地的瓶颈。当我们将一个在高端GPU上训练流畅的PyTorch模型部署到Jetson Nano或树莓派这类边缘设备时,往往会…...
猫抓浏览器插件:三步快速搞定网页视频音频下载的完整指南
猫抓浏览器插件:三步快速搞定网页视频音频下载的完整指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常遇到在线视频无法保…...
告别串口转换器:在OpenWrt上纯软件模拟SDI-12主设备,对接水文气象传感器实战
纯软件实现SDI-12协议:在OpenWrt网关直接接入水文传感器的工程实践 当需要在偏远地区部署水文气象监测系统时,传统方案往往需要携带多种信号转换器。我曾在一个湿地监测项目中,因为忘记带SDI-12转RS485模块而差点延误整个部署计划。这次经历让…...
Windows系统配置自动化工具:WinUtil深度技术解析与实战指南
Windows系统配置自动化工具:WinUtil深度技术解析与实战指南 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 技术挑战与解决方案定…...
别再只会用convert了!GraphicsMagick这10个隐藏命令,让你批量处理图片效率翻倍
GraphicsMagick高阶技巧:10个被低估的命令让图片处理效率飙升 如果你还在用convert命令处理所有图片任务,那就像用瑞士军刀切牛排——能用,但绝对不够高效。GraphicsMagick作为ImageMagick的轻量化分支,保留了核心功能的同时显著提…...
从手机TCP调试助手到单片机:ESP8266-01s数据透传完整链路搭建实录
从手机到单片机:ESP8266-01s数据透传实战指南 去年夏天,我在为一个智能农业项目搭建远程控制模块时,第一次真正体会到ESP8266-01s这个小巧WiFi模块的强大之处。当时需要在50米外的水泵控制器上实现手机远程开关,而ESP8266-01s配合…...
