给上传的图片添加水印--在流文件中添加

图片添加文字水印 java语言 图片上传 MultipartFile文件类型接收,添加文字水印,转InputStream输入流 立即下载

工作中遇到要用java在后台给移动端上传上来的图片添加一个时间的水印。上传上来的本来是图片流。我在网上搜索的都是给图片添加的,但是我又不想通过流生成临时图片,添加水印之后再上传。所以修改了一下网上的那种给文件添加水印的方法,现在传进去从前台或者移动端上传的文件即可添加上水印。

代码如下:

   /**  
     * 添加文字水印  
     * @param pressText 水印文字,  
     * @param x 水印文字距离目标图片左侧的偏移量,如果x<0, 则在正中间  
     * @param y 水印文字距离目标图片上侧的偏移量,如果y<0, 则在正中间  
     *          注:若x,y都等于1,则在图片的右下方
     * @param alpha 透明度(0.0 -- 1.0, 0.0为完全透明,1.0为完全不透明)  
     */  
    public void pressText(MultipartFile attach,String pressText,int x,int y,float alpha){  
        try {  
            CommonsMultipartFile cf= (CommonsMultipartFile)attach; //这个myfile是MultipartFile的
            DiskFileItem fi = (DiskFileItem)cf.getFileItem(); 
            File file = fi.getStoreLocation();
            Image image = ImageIO.read(file);  
            int width = image.getWidth(null);  
            int height = image.getHeight(null);  
            
            BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);  
            Graphics2D g = bufferedImage.createGraphics();  
            g.drawImage(image,0,0, width, height, null);  
            g.setFont(new Font("微软雅黑",Font.BOLD,24));  
            g.setBackground(Color.white);
            g.setColor(Color.red);  
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));  
              
            int width_wi = 24*getTextLength(pressText);  
            int height_wi = 24;  
              
            int widthDiff = width-width_wi;  
            int heightDiff = height-height_wi;  
            if(x<0){  
                x = widthDiff/2;  
            }else if(x>widthDiff){  
                x=widthDiff;  
            }  
              
            if(y<0){  
                y = heightDiff/2;  
            }else if(y>heightDiff){  
                y = heightDiff;  
            }  
            if(x==1&&y==1){
                x = width-width_wi-70;
                y = height-height_wi;
            }
            g.drawString(pressText, x, y);//水印文件  y+height_wi
            g.dispose();  
            ImageIO.write(bufferedImage, "JPEG", file);  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }
    /** 
     * 计算文字像素长度 
     * @param text 
     * @return 
     */  
    private int getTextLength(String text){  
        int textLength = text.length();  
        int length = textLength;  
        for (int i = 0; i < textLength; i++) {  
            int wordLength = String.valueOf(text.charAt(i)).getBytes().length;  
            if(wordLength > 1){  
                length+=(wordLength-1);  
            }  
        }  
          
        return length%2==0 ? length/2:length/2+1;  
    }
上传的接口代码如下
      @RequestMapping(value = "/upload",method=RequestMethod.POST)
    @ResponseBody
    public String uploadFile(@RequestParam("files") MultipartFile[] files,HttpServletRequest request, HttpServletResponse response){
        List<String> pathArray = new LinkedList<String>();
        String retStr = "";
        try {
            //FileManagerConfig.TRACKER_NGNIX_ADDR = fastDFS;
        // 获取文件后缀名 
            for(MultipartFile attach:files){
                //1.0代表水印不透明,0.1-1.0为透明度设置
                pressText(attach, "这里是你要添加的水印文字", 1, 1, 1.0f);
                System.out.println("attach.getOriginalFilename()======"+attach.getOriginalFilename());
                String ext = attach.getOriginalFilename().substring(attach.getOriginalFilename().lastIndexOf(".")+1);
                //下面的attach.getBytes()获取的字节流中就带有水印了。下面的方法是上传到图片服务器的。
                FastDFSFile file = new FastDFSFile(attach.getBytes(),ext);
                NameValuePair[] meta_list = new NameValuePair[4];
                meta_list[0] = new NameValuePair("fileName", attach.getOriginalFilename());
                meta_list[1] = new NameValuePair("fileLength", String.valueOf(attach.getSize()));
                meta_list[2] = new NameValuePair("fileExt", ext);
                meta_list[3] = new NameValuePair("fileAuthor", "hzxh");
                String filePath = FileManager.upload(file,meta_list);
                pathArray.add(filePath);
            }
            for(int i=0;i<pathArray.size();i++){
                retStr += pathArray.get(i);
                if(i<pathArray.size()-1)retStr += "@";
            }
        } catch (IOException  e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("------添加图片-----------" + retStr);
        return retStr;
    }


因为移动端一次上传多个文件,所以我用的一个数组接收的上传的文件。

上传到文件服务器的源码见:http://download.youkuaiyun.com/download/it_java_shuai/9960309

希望可以帮到大家!

react-React水印组件支持图片水印文字水印 React水印组件,支持图片水印,文字水印。 立即下载

相关推荐

图片水印添加并输出图片流(不保存文件)

图片水印添加并输出图片流(不保存文件),当然你也可以选择保存图片至文件系统

Java MultipartFile实现文件上传并为图片加上水印(二)

防止走丢~~欢迎大家留言收藏点赞 在上一篇我们已经实现了文件的上传,那么如果对于图片的上传,我们要给图片加上我们需要的水印信息,比如图片的上传人,上传地点等信息,此时我们为上传功能再新增水印功能。 最终上传效果如图所示 一、前端上传至服务端(controller层) 水印信息可以由客户端请求过来,也可以服务端自定义,因为我现在的业务是车辆图片上传,需要为上传的车辆图片增加车牌号、上传人、上传经纬度以及地址信息等,这些信息是由客户端获取以后给到服务端的,水印信息加什么东西大家可以灵活操作。 /** *

weixin_42171478的博客 2063

一款值得关注的开源企业管理ERP系统

盒木ERP是一款开源的现代化企业管理系统,采用前后端分离架构,后端基于Python+Django,前端使用Vue+Ant Design。系统涵盖采购、销售、库存、财务等核心业务模块,支持移动端操作和PDA扫码。具有开源免费、技术先进、功能完善等特点,适合中小企业使用或二次开发。项目提供详细部署指南,支持Docker容器化部署,是学习ERP系统开发和企业数字化转型的优秀选择。

1107

Java实现添加文字水印、图片水印功能实战

本文介绍java实现在图片上加文字水印的方法,水印可以是图片或者文字,操作方便。java实现给图片添加水印实现步骤:获取原图片对象信息(本地图片或网络图片)添加水印(设置水印颜色、字体、坐标等)处理输出目标图片一、java实现给图片添加文字水印1.获取原图片对象信息第一步:获取需要处理的图片获取图片的方式,通常由两种:一种是通过下载到本地,从本地读取(本地图片);另外一种是通过网络地址进行读取(网...

Java知音 923

FPGA图像处理之直方图均衡实现

直方图均衡的基本原理,就是对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行拉伸,而对像素个数较少的灰度值(即对画面不起主要作用的灰度值)进行合并,从而提高对比度,使图像清晰,达到增强的目的。综合以上两个条件,累积分布函数是个好的选择,因为累积分布函数是单调增函数(控制大小关系),并且值域是0到1(控制越界问题),所以直方图均衡化中使用的是累积分布函数。

FZWzsl的博客 1428

从零打造音乐会级特雷门琴:原理、设计与调试全解析

电子乐器的工作原理通常基于信号生成与调制。特雷门琴作为世界上最早的电子乐器之一,其核心原理是利用射频振荡器和电容传感,将演奏者的手势变化转化为音高与音量信号。这种技术通过外差式混频实现音高控制,并利用压控放大器实现细腻的音量动态,其工程价值在于将抽象的空间位置信息精确映射为连续的音频参数。在音乐制作、声音艺术和交互装置等领域,这类技术为创造独特的演奏体验提供了基础。本文聚焦于如何从电路层面实现一台高稳定性的特雷门琴,详细阐述了从LC振荡器设计、天线场形优化到音色混合检波等关键环节,并分享了基于LTspice

weixin_34046298的博客 171

java实现给图片添加水印

import java.awt.AlphaComposite; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import jav

kaixinnongchang208的专栏 990

新时代多目标优化【数学建模】领域的极致探索——数学规划模型

数学规划模型是数学建模中用于描述和解决优化问题的一类模型。它通过构建目标函数和约束条件,将实际问题转化为数学形式,旨在寻找满足约束条件的最优解。数学规划模型广泛应用于各个领域,包括资源分配、生产计划、物流管理和金融投资等,通过线性规划、非线性规划、整数规划等方法,帮助决策者在复杂环境中做出最优选择。

小李很执着的博客 5884

C# 给url获取图片添加文字水印

c# 图片添加文字水印

qq_40099034的博客 525

SP贴图高效导入Maya:从材质设置到渲染优化的完整流程

本文详细解析了将Substance Painter(SP)贴图高效导入Maya并配合Arnold渲染器的完整工作流。针对SP贴图在Maya中常见的色彩、法线等问题,核心在于对齐两者的PBR“语言”,重点讲解了SP中正确的贴图导出设置(包括色彩空间)以及在Maya中连接aiStandardSurface材质、处理法线贴图、优化渲染的标准化流程,确保材质效果准确无误。

weixin_29201933的博客 554

RK3588与银河麒麟V10 SP1 2403深度适配:国产化硬件与操作系统的完美融合

本文深入探讨了RK3588处理器与银河麒麟V10 SP1 2403操作系统的深度适配,展示了国产化硬件与操作系统的完美融合。通过性能验证和实际应用测试,证明了这套组合在多媒体处理、AI推理和日常办公中的卓越表现,实现了完全自主可控的计算平台。

weixin_29194255的博客 249

关键IO流中自动创建文件路径

直接上代码: import java.io.*; public class ServiceHello { public synchronized void getValue(String fileName,byte[] content) { // TODO Auto-generated method stub File f = null; OutputStream out ...

醉梦洛的博客 1712

K8S部署Java项目 pod的logs报错为:Error: Unable to access jarfile app.jar

每个人都有惰性,但不断学习是好好生活的根本,共勉!

感谢阅读 2600

上传图片添加水印

页面部分 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="tupianshuiyin.aspx.cs" Inherits="tupianshuiyin" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml...

dijiaobo7611的博客 194

第4章 部署负载均衡 Keepalived + HAProxy

本章在所有 Master 节点部署 Keepalived + HAProxy,为 kube-apiserver 提供高可用入口。Keepalived 实现 VIP(192.168.3.59)漂移,HAProxy 轮询转发请求至三个 Master 的 6443 端口(监听 6444 避免冲突)。健康检查脚本连续 5 次失败则停止 Keepalived,触发 VIP 自动切换。本章还包含配置详解、日常运维和问题排查。

幸福街--linux技术分享 120

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java使用Graphics2D实现将网络图片转换到本地在为图片添加水印然后上传到腾讯云

使用Graphics2D实现将网络图片转换到本地在为图片添加水印然后上传到腾讯云功能目标实现思路 功能目标 :实现使用URL或者本地的图片添加水印 实现思路 :将URL文件转为流文件 在使用Graphics2D 为流文件添加水印,再将添加完水印的图片保存到本地,在根据保存在本地的水印图片上传到腾讯云 实现效果图: 代码实现 /** * 测试函数 **/ public static void main(String[] args) { markImageByText("哈哈哈

TianYu 3950

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上传图片以及添加水印

1.首先简单在在页面放上一个文件上传的控件及一个按钮用作点击上传,再放一个image控件用来显示上传的图片 HTML页面 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="tupianshuiyin.aspx.cs" Inherits="tupianshuiyin" %> <!DOCTYPE htm...

weixin_30918415的博客 88

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

生成缩略图,图片水印文字即学即用

<br /> /// <summary><br />    /// 生成缩略图<br />    /// </summary><br />    /// <param name="myStream">得到的流文件对象</param><br />    /// <param name="uploadPath">保存的路径</param><br />    /// <param name="picName">上传的图片的文件名</param><br />    public void ToImage(Syste

金培龙(Long_carol)的专栏 870

java 进销存 商户管理系统 客户管理 库存管理 销售报表 SSM项目

官网 http://www.fhadmin.org/ 技术点 1. 导出 导入 excel 文件 2. IO 流上传下载文件 3. 群发邮件,可以发html、纯文本格式,可以发给任意邮箱(实现批量发送广告邮...

chenyong33988的博客 257

阿里云国际版全产品介绍(媒体服务)

是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、高效云剪辑处理、分发加速、视频播放于一体的一站式音视频点播解决方案。基于前瞻的内容接入、分发网络和大规模分布式实时转码技术打造的音视频直播平台,提供便捷接入、高清流畅、超低延时、高并发的音视频直播服务。多媒体数据处理服务。以经济、弹性和高可扩展的转换方法,将多媒体数据转码成适合在全平台播放的格式。集成了直播推流、视频播放、短视频创作、美颜特效、音频特效等核心能力为您提供一体化SDK,支持移动端、桌面端、Web端等多终端接入,搭配开源UI组件和产品级D

zzy4179的博客 1595

FFmpeg实战指南:从零掌握音视频处理核心工具

音视频处理是多媒体开发中的基础技术,其核心在于对媒体文件的编解码、格式转换与流处理。FFmpeg作为一套开源的音视频处理解决方案,集成了领先的编解码库libavcodec和格式处理库libavformat,能够高效完成视频转码、音频提取、流媒体转发等任务。在工程实践中,开发者常利用FFmpeg进行视频裁剪、合并、添加水印等操作,其命令行工具和库函数为各类音视频应用提供了底层支持。无论是构建流媒体服务器还是开发视频编辑工具,掌握FFmpeg的环境搭建、命令使用及编程集成,都能显著提升开发效率与系统性能。本文通

weixin_30770783的博客 351

告别在线转换器:用FFmpeg、ImageMagick和Poppler搭建本地格式转换工作流

格式转换是日常开发与办公中高频出现的需求,无论是图片格式互转、PDF页面拆分提取,还是音视频编码适配,都离不开可靠的工具链。在线转换器常受限于文件大小、上传隐私及排队等待,而付费软件又缺乏批量处理能力。以FFmpeg、ImageMagick、Poppler为代表的开源命令行工具,凭借强大的编码支持和脚本化批处理能力,成为构建本地转换工作流的理想选择。理解封装与编码、位深与透明通道等基本原理,能帮助开发者避免转换后的黑底、乱码或播放失败等典型问题。从单文件快速处理到批量自动化,从个人电脑到服务器生产环境,这套

weixin_34233974的博客 270

【FastDFS入门】简单实现文件上传、下载

FastDFS是什么??       FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。       FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很...

郑清 8983

对图片或者PDF流文件加水印

给图片或者PDF流数据加水印当业务需要对图片/PDF文件预览或者下载文件加水印实现,当我们获取不到图片路径时(如图片放在阿里云服务器),故我们只能对文件流加水印!!!(文章末尾附完整代码)setWatermark()给pdf文件加水印paintWatermarkImage()方法,对图片格式加水印PDF文件加水印后对比 当业务需要对图片/PDF文件预览或者下载文件加水印实现,当我们获取不到图片路径时(如图片放在阿里云服务器),故我们只能对文件流加水印!!!(文章末尾附完整代码) fileId为get请求中

Jmimoic的博客 1009

java 加文字水印MultipartFile方式

private static final Font FONT = new Font("微软雅黑", Font.PLAIN, 14);* 当你导入spring-test依赖的时候 会跟某些依赖冲突(暂未找到具体是哪个冲突)* file转MultipartFile的时候会用到MockMultipartFile。* 1、中文长度即文本长度 2、英文长度为文本长度二分之一。// 消除java.awt.Font字体的锯齿。// 设置水印透明度。* 计算水印文本长度。

weixin_56576835的博客 674

通过itext给pdf文件添加水印,并通过response返回

1.把原来从微软云download下的输出流转为输入流(因为PdfReader只接收输入流) try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { if (scontentType.equals("application/pdf")) { blobClient.download(outputStream); log.info("outputStream的大小:{}", outputStream.toBy

Miracle_Gaaral的博客 1474
上一篇: SSM框架中使用Spring的@Transactional注解进行事务管理(详细说明)
下一篇: java通过经纬度获取位置截图并上传
异常的昵称
博客等级 码龄10年 18粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

异常的昵称

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值