/**
* 打水印 Imagename_biao是水印文件 ImgName是原图
* @param Imagename_biao
* @param ImgName
*/
public static void imgYin(String Imagename_biao, String ImgName) {
//System.out.println("11111111111111111111111111111111 inin");
FileImageOutputStream out=null;
File _file=null;
BufferedImage image=null;
File _filebiao=null;
try {
_file = new File(ImgName);
Image src = ImageIO.read(_file);
int wideth = src.getWidth(null);
int height = src.getHeight(null); //宽大于300才打水印
if (wideth > 300) {
image = new BufferedImage(wideth, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = image.createGraphics();
g.drawImage(src, 0, 0, wideth, height, null);
// g.drawImage(src.getScaledInstance(wideth,
// height,Image.SCALE_SMOOTH), 0, 0,wideth, height, null); // 水印文件
_filebiao = new File(Imagename_biao);
Image src_biao = ImageIO.read(_filebiao);
int wideth_biao = src_biao.getWidth(null);
int height_biao = src_biao.getHeight(null);
// 水印文件显示在中央
g.drawImage(src_biao, (int) (0.5 * (wideth - wideth_biao)),
(int) (0.5 * (height - height_biao)), wideth_biao,
height_biao, null);
// g.drawImage(src_biao.getScaledInstance(wideth_biao,
// height_biao,Image.SCALE_SMOOTH), (int)(0.5*(wideth
// -wideth_biao)) , (int)(0.5*(height -height_biao)),
// wideth_biao,
// height_biao, null);
// 水印文件在原图片文件的位置,原图片文件的右下角为wideth-0,height-0
g.dispose();
// FileOutputStream out = new FileOutputStream(ImgName);
// JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
// JPEGEncodeParam param =
// encoder.getDefaultJPEGEncodeParam(image);
// param.setQuality(0.9f, false); //不压缩图像fals
// encoder.setJPEGEncodeParam(param);
// encoder.encode(image);
// out.flush();
// out.close(); // ImageIO.write(image, "jpg", new File(ImgName)); Iterator<ImageWriter> iter = ImageIO
.getImageWritersByFormatName("jpg");
if (iter.hasNext()) {
ImageWriter writer = iter.next();
ImageWriteParam param = writer.getDefaultWriteParam(); param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); //MODE_COPY_FROM_METADATA ,MODE_EXPLICIT
param.setCompressionQuality(0.9f);
//System.out.println("Quality:"+1.0);
out = new FileImageOutputStream(
new File(ImgName));
writer.setOutput(out);
// writer.write(bi);
writer.write(null, new IIOImage(image, null, null), param);
out.close();
writer.dispose(); } } } catch (Exception e) {
System.out.println(e);
e.printStackTrace();
}finally{ if(out!=null){
try
{
out.close();
} catch (Exception e) {
//e.printStackTrace();
}
}
}
}

宝贝网址:

打水印 Imagename_biao是水印文件 ImgName是原图的更多相关文章

  1. JAVA实用案例之水印开发

    写在最前面 上周零零碎碎花了一周的时间研究水印的开发,现在终于写了个入门级的Demo,做下笔记同时分享出来供大家参考. Demo是在我上次写的 JAVA实用案例之文件导入导出(POI方式) 框架基础上 ...

  2. JAVA实用案例之图片水印开发

    写在最前面 上周零零碎碎花了一周的时间研究水印的开发,现在终于写了个入门级的Demo,做下笔记同时分享出来供大家参考. Demo是在我上次写的 JAVA实用案例之文件导入导出(POI方式) 框架基础上 ...

  3. 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])

    常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...

  4. 不错.net图片水印类

    using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Draw ...

  5. 应用DEV第三方界面控件制作批量添加水印程序

    本次应用DevExpress和C#语言制作了一个批量添加水印的程序,看界面效果图: 界面中既可以进行文字水印添加,也可以图片水印添加,同时还可以对水印的位置进行设置,比较实用! 文字水印的具体添加情况 ...

  6. ThinkPHP图片上传

    ThinkPHP是国内比较流行的轻量级的PHP框架,它在国内流行的一个最主要的因素在于它的说明文档非常健全完善,以及它源码内的注释都是中文的,方便于英语能力较差的程序员学习. 图片上传在网站里是很常用 ...

  7. thinkphp达到UploadFile.class.php图片上传功能

    片上传在站点里是非经常常使用的功能.ThinkPHP里也有自带的图片上传类(UploadFile.class.php) 和图片模型类(Image.class.php).方便于我们去实现图片上传功能,以 ...

  8. .net为图片添加水印(转) jpg png和gif格式

    .net为图片添加水印(转) jpg png和gif格式 .net为图片添加水印(转) jpg png和gif格式,转自csdn的hyde82,现在跟大家一起来分享下: 利 用.net中System. ...

  9. 上传图片(示列分析) $_FILES

    新建一个think_photo数据库,库里用sql CREATE TABLE IF NOT EXISTS `think_photo` ( `id` ) NOT NULL AUTO_INCREMENT, ...

随机推荐

  1. PHP如何通过CURL上传文件

    PHP使用CURL上传文件只需发送一个POST请求就可以了,在请求中设置某个字段为需要上传的文件全路径,并且以“@”开头,然后使用CURL把该变量以POST方式发送到服务器,在服务端即可以从超级全局变 ...

  2. ylbtech-Miscellaneos

    ylbtech-Miscellaneos: A,返回顶部 1, 2, B返回顶部 1, 2 作者:ylbtech出处:http://ylbtech.cnblogs.com/本文版权归作者和博客园共有, ...

  3. USACO 滑雪课程

    #include<cstdio> #include<iostream> using namespace std; int T,S,N,maxd; ],lv[],next[],f ...

  4. C# 托管和非托管混合编程

    在非托管模块中实现你比较重要的算法,然后通过 CLR 的平台互操作,来使托管代码调用它,这样程序仍然能够正常工作,但对非托管的本地代码进行反编译,就很困难.   最直接的实现托管与非托管编程的方法就是 ...

  5. 图标:适配不同分辨 的 hdpi、mdpi、ldpi 文件夹

    一:不同的layout Android手机屏幕大小不一,有480×320, 640×360, 800×480.怎样才能让App自动适应不同的屏幕呢? 其实很简单,只需要在res目录下创建不同的layo ...

  6. EA使用

    类逻辑图 关系1:泛化(继承),Driver和Northeastermer继承了Person类 关系2:实现,Northeastermer实现了LivingLeiFeng类 关系3:  关联,两个对象 ...

  7. 添加AppWidget功能

    要为程序添加AppWidget 1 首先要建立一个继承于AppWidgetProvider的类 MyWidget public class MyWidget extends AppWidgetProv ...

  8. 经典算法C++版(参考一线码农博文)

    鉴于一线码农的算法博文基本通过C#完成,此处用C++再实现一遍,具体解法可参考其博文. 地址:http://www.cnblogs.com/huangxincheng/category/401959. ...

  9. No.7__C#_Final

    实习期的完结,暂时告一个段落了 现在是周五的晚上十点三刻,洗完澡后,决定先写一点.今天是实习的最后一天,平平淡淡的完成了实习作业.本以为周五会像往常那样迫不及待的离开,迎接自己的 周末.可是,今天下午 ...

  10. 大规模IP地址黑名单高性能查询实现

    嗯……前阵子接了个活儿,需要做一个基于IP地址黑名单的分流网关.刚接到的时候心想iptables不就行了么,没想到一看客户给的IP黑名单规模……我擦……上亿个…… 黑名单到了这个规模,就不得不考虑下优 ...