JAVA制作水印效果,字体和图片,调节透明度,使用了JIMI的类库
2009-08-29 02:02
761 查看
原始图片
要加的水印
制作好的图片
源代码
要加的水印
制作好的图片
源代码
import java.io.IOException; import java.awt.Graphics; import java.awt.*; import java.awt.Image; import java.awt.image.BufferedImage; import java.awt.image.ImageProducer; import java.io.File; import java.io.FileOutputStream; import javax.imageio.ImageIO; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; import com.sun.jimi.core.Jimi; import com.sun.jimi.core.JimiException; import com.sun.jimi.core.JimiWriter; import com.sun.jimi.core.options.JPGOptions; /** * java做水印,字体和图片,调节透明度. * * @author myjava_024,老紫竹 JAVA世纪网(java2000.net) * */ public class T { /** * 将任何格式的图片转换成JPG图片 source原图片路径 dest 转换后图片的路径 */ public void toReduce(String source, String dest) { try { JPGOptions options = new JPGOptions(); options.setQuality(100); // 图片格式在jimi的解码格式范围内 ImageProducer image = Jimi.getImageProducer(source); // 图片编码 JimiWriter writer = Jimi.createJimiWriter(dest); writer.setSource(image); // 对输出文件的属性进行相关的设置,每种格式的属性都不一样 writer.setOptions(options); writer.putImage(dest); } catch (JimiException je) { System.err.println("Error: " + je); je.printStackTrace(); } } /** * 实现对图片的抽取缩略并控制生成图的大小 oldfile原图片路径 newfile缩略后的 图片路径 wideths 缩略后图片的宽 * heights缩略后图片的高 */ public void changDimension(String oldfile, String newfile, int wideths, int heights) throws JimiException, IOException { String temp = newfile; File inputfile = null; this.toReduce(oldfile, temp); // 读入文件 inputfile = new File(temp); // 构造Image对象 Image src = ImageIO.read(inputfile); // double wideth = (double) src.getWidth(null); // 得到源图宽 // double height = (double) src.getHeight(null); // 得到源图长 int iWideth = wideths; int iHeight = heights; BufferedImage tag = null; try { tag = new BufferedImage(iWideth, iHeight, BufferedImage.TYPE_INT_RGB); // 绘制缩小后的图 tag.getGraphics().drawImage(src, 0, 0, iWideth, iHeight, null); JimiWriter writer = Jimi.createJimiWriter(newfile); writer.setSource(tag); writer.putImage(newfile); } catch (Exception e) { e.printStackTrace(); } } /** * 给图片添加文字 oldfile newfile就不用多说了 text 就是给图片加的文字 */ public void Imagefont(String oldfile, String newfile, String text) { Image img; String filename = oldfile.substring(oldfile.lastIndexOf(".") + 1); String temp = newfile; try { if (!filename.equals("jpg")) { this.toReduce(oldfile, newfile); img = ImageIO.read(new File(temp)); } else { img = ImageIO.read(new File(oldfile)); } int width = img.getWidth(null); int height = img.getHeight(null); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = image.createGraphics(); g.drawImage(img, 0, 0, width, height, null); g.setColor(Color.red); g.setFont(new Font("Courier", Font.HANGING_BASELINE, 40)); g.drawString(text, width - 360, height - 72); g.dispose(); FileOutputStream os = new FileOutputStream(temp); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os); encoder.encode(image); } catch (Exception e) { e.getMessage(); } } /** * 给图片添加水印,并控制水印图片的位置及透明度 oldfile newfile我也不说了 syoldfile 要添加的水印图片的路径 t * 水印图品添加的位置 to 水印图片的透明度 */ public void Imagese(String oldfile, String newfile, String syoldfile, int t, float to) { // 文件类型 String filename = oldfile.substring(oldfile.lastIndexOf(".") + 1); System.out.println(filename); Image img; String temp = newfile; float alpha = to; try { if (!filename.equals("jpg")) { toReduce(oldfile, newfile); img = ImageIO.read(new File(temp)); System.out.println("其他类型图片创建生成水印的图片"); } else { img = ImageIO.read(new File(oldfile)); } int width = img.getWidth(null); int height = img.getHeight(null); int ws = width / 3; int hs = height / 3; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); g.drawImage(img, 0, 0, width, height, null); Image logo = ImageIO.read(new File(syoldfile)); int lw = logo.getWidth(null); int lh = logo.getHeight(null); // 设置图片透明度 g .setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); g.drawImage(logo, null, null); switch (t) { case 1: g.drawImage(logo, 0, 0, lw, lh, null); System.out.println("布局一"); break; case 2: g.drawImage(logo, ws, 0, lw, lh, null); System.out.println("布局二"); break; case 3: g.drawImage(logo, 2 * ws, 0, lw, lh, null); System.out.println("布局三"); break; case 4: g.drawImage(logo, 0, hs, lw, lh, null); System.out.println("布局四"); break; case 5: g.drawImage(logo, ws, hs, lw, lh, null); System.out.println("布局五"); break; case 6: g.drawImage(logo, 2 * ws, hs, lw, lh, null); System.out.println("布局六"); break; case 7: g.drawImage(logo, 0, 2 * hs, lw, lh, null); System.out.println("布局七"); break; case 8: g.drawImage(logo, ws, 2 * hs, lw, lh, null); System.out.println("布局八"); break; case 9: g.drawImage(logo, 2 * ws, 2 * hs, lw, lh, null); System.out.println("布局九"); break; default: break; } g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); g.dispose(); // 生成图片 FileOutputStream oss = new FileOutputStream(temp); JPEGImageEncoder encoders = JPEGCodec.createJPEGEncoder(oss); encoders.encode(image); } catch (Exception e) { e.getMessage(); e.printStackTrace(); } } public static void main(String[] args) { T test = new T(); // alpha表示透明度,alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 float alpha = 0.1f; // 生成水印图 test.Imagese("d:/eclipse.jpg", "d:/eclipse_java2000.jpg", "d:/java2000.jpg", 1, alpha); /* * test.Imagese("d:/001.jpg", "d:/aa/001.jpg", "d:/002.jpg", 1, alpha); * test.Imagese("d:/001.jpg", "d:/aa/002.jpg", "d:/002.jpg", 2, alpha); * test.Imagese("d:/001.jpg", "d:/aa/003.jpg", "d:/002.jpg", 3, alpha); * test.Imagese("d:/001.jpg", "d:/aa/004.jpg", "d:/002.jpg", 4, alpha); * test.Imagese("d:/001.jpg", "d:/aa/005.jpg", "d:/002.jpg", 5, alpha); * test.Imagese("d:/001.jpg", "d:/aa/006.jpg", "d:/002.jpg", 6, alpha); * test.Imagese("d:/001.jpg", "d:/aa/007.jpg", "d:/002.jpg", 7, alpha); * test.Imagese("d:/001.jpg", "d:/aa/008.jpg", "d:/002.jpg", 8, alpha); * test.Imagese("d:/001.jpg", "d:/aa/009.jpg", "d:/002.jpg", 9, alpha); */ } }
相关文章推荐
- 使用PHP制作图片水印
- java 图片加水印,设置透明度。说明非常具体
- 使用Java添加图片水印和文字水印
- java 制作图片水印
- Java 图片添加水印效果
- 使用一般处理程序(IHttpHandler)制作图片水印
- JAVA实现图片的修改,添加文字水印效果
- 使用Java添加图片水印和文字水印
- 【JAVA】java图片处理类库Thumbnails使用教程,图片缩放、裁剪、旋转、压缩
- JAVA技术实现上传图片水印效果
- Java使用OpenCV实现人脸识别/人眼检测/图片截取/合成/添加水印
- 單純使用PHP腳本不借助任何外部库或图片以及字体产生动画效果的Gif验证码图片
- 使用java 给指定图片添加(水印)文字(不需要导入多余jar包)
- XRecyclerView的简单使用与图片拉动字体缩放效果的实现
- 使用js给页面显示的图片添加水印效果
- 單純使用PHP腳本不借助任何外部库或图片以及字体产生动画效果的Gif验证码图片
- java实现给图片添加水印、透明度
- Java代码实现图片水印效果
- 使用js制作一般网站首页图片轮播效果
- GDI+ 在Delphi程序的应用 -- 制作水印效果图片