小葵花课堂开奖啦,上传图片想带文字水印肿么办,看下方例子:
- 嗯,是个栗子:
> 上传图片和加水印:
代码块
基于Spring,SpringMVC,Mybatis框架开发:
1.Controller:
@Controller
@RequestMapping(“/loading”)
public class Bannercontroller {
@Autowired
private BannerServie bs;
@RequestMapping(“/file”)
public String LoaderBanner(MultipartHttpServletRequest file,HttpServletRequest req){
List<~> list = file.getFiles(“file”);
for (MultipartFile multipartFile : list) {
bs.addBanner(multipartFile,req);
}
return "/ok.jsp";
}
}
2.Service
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import com.apache.dao.BannerDao;
import com.apache.entity.Banner;
import com.baizhi.util.ImageRemarkUtil;
@Service
@Transactional
public class BannerServiceImp implements BannerServie{
@Autowired
private BannerDao bannerDao;
// 水印透明度
private static float alpha = 0.5f;
// 水印横向位置
private static int positionWidth = 100;
// 水印纵向位置
private static int positionHeight = 100;
// 水印文字字体
private static Font font = new Font("宋体", Font.BOLD, 72);
// 水印文字颜色
private static Color color = Color.red;
// 水印图片间隔
private static int interval = 0;
@Override
public void addBanner(MultipartFile file, HttpServletRequest req) {
//获取本项目的路径
String realpath= req.getSession().getServletContext().getRealPath("/");
//获取上级目录
String webapps = new File(realpath).getParent();
//创建上传的目录
File file2 = new File(webapps,"loadup");
//判断覅le是否存在 如果存在就创建新的文件路径
if(!file2.exists()){
file2.mkdir();
}
/**以上的方法是创建目录
* 修改文件名时间戳+ UUID+"."+后缀
*/
//获取原来文件的名字
String file3 = file.getOriginalFilename();
//创建时间戳
String filename=new SimpleDateFormat("yyyyMMddHHmmssSS").format(new Date())
+UUID.randomUUID().toString().replace("-", "")+"."+FilenameUtils.getExtension(file3);
//上传文件状态 文件路径 id 放入数据库
File file4 = new File(file2,filename);
OutputStream os = null;
try {
file.transferTo(file4);
// 1、源图片
Image srcImg = ImageIO.read(file4);
BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),
srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
// 2、得到画笔对象
Graphics2D g = buffImg.createGraphics();
// 3、设置对线段的锯齿状边缘处理
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,
null);
// 5、设置水印文字颜色
g.setColor(color);
// 6、设置水印文字Font
g.setFont(font);
// 7、设置水印文字透明度
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));
// 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)
g.drawString("版权所有,侵权必究", positionWidth, positionHeight);
// 9、释放资源
g.dispose();
// 10、生成图片
os = new FileOutputStream(file4);
ImageIO.write(buffImg, "JPG", os);
String netpath=req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()
+File.separator+"loadup"+File.separator+filename;
String id = UUID.randomUUID().toString().replace("-", "");
//调取方法那id netpath 入库
Banner banner = new Banner(id,"name",netpath,"1","1",new Date());
bannerDao.Uploaderpath(banner);
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if (null != os)
os.close();//关闭流
} catch (Exception e) {
e.printStackTrace();
}
}
}
重点内容
脚注
参考:http://blog.youkuaiyun.com/zengshunyao/article/details/44758297[^footnote].
流程图: