怎样用JAVA实现电子印章?

Python014

怎样用JAVA实现电子印章?,第1张

参考如下代码:

package com.wonders.cop.billing.util

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.InputStream

import java.io.OutputStream

import java.util.HashMap

import java.util.Iterator

import java.util.Map

import javax.imageio.ImageIO

public class ImageMarkLogoUtil {

// 水印透明度

private static float alpha = 1f

// 水印横向位置

private static int positionWidth = 82

// 水印纵向位置

private static int positionHeight = 545

// 水印文字字体

private static Font font = new Font("宋体", Font.PLAIN, 13)

// 水印文字颜色

private static Color color = Color.black

public static void main(String[] args) {

String srcImgPath = "d:/888880002302900_web.jpg"

String targerTextPath = "d:/qie_text.jpg"

ImageMarkLogoUtil

.markImageByTexts(testValue(),

BillDetailImagePosition.getPosition("888880002302900"), srcImgPath,

targerTextPath)

}

public static Map testValue() {

Map<String, String>value = new HashMap<String, String>()

value.put("feedPrice", "15.1")

value.put("feedCount", "20")

value.put("nowNum", "124")

value.put("drainageCount", "55")

value.put("drainagePrice", "1.5")

value.put("feedCost", "66")

value.put("cost", "66")

value.put("drainageCost", "100")

value.put("barcode", "10101010101010101")

value.put("nextCopy", "2014-12-10")

value.put("waterType", "居民生活用水")

value.put("meterReader", "测试人员")

value.put("copyNumber", "741sg")

value.put("prevCarryOver", "0.25")

value.put("nowCarryOver", "2.12")

value.put("openDate", "20141002")

value.put("nextMonth", "201402 ")

value.put("remark", "您缴付的2013年03月30.80元水费,我公司已收到,谢谢!")

value.put("detailStatus", "00")

value.put("billStatus", "00")

value.put("prevMonth", "201406")

value.put("lastPayDate", "20140112")

value.put("companyName", "市北水")

value.put("type", "1")

value.put("amount", "58.1")

value.put("address", "浦秀路220弄10号101")

value.put("year","2014")

value.put("month", "04")

value.put("billId", "11111")

value.put("account", "38445450")

value.put("companyId", "888880002302900")

value.put("realName", "姚航")

return value

}

/**

* 给图片添加水印文字、可设置水印文字的旋转角度

*

* @param logoText

* @param srcImgPath

* @param targerPath

* @param degree

*/

public static void markImageByTexts(Map<String, String>value,

Map<String, String[]>position, String srcImgPath, String targerPath) {

InputStream is = null

OutputStream os = null

try {

// 1、源图片

Image srcImg = ImageIO.read(new File(srcImgPath))

BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),

srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB)

// 2、得到画笔对象

Iterator<String>positionIter = position.keySet().iterator()

String key = ""

String logotext = ""

String[] xy

while (positionIter.hasNext()) {

key = positionIter.next()

xy = position.get(key)

logotext = value.get(key)

System.out.println("key:"+key+",value:"+logotext)

if (xy != null &&xy.length == 2)

printText(srcImg, buffImg, logotext,

Integer.valueOf(xy[0]), Integer.valueOf(xy[1]))

}

// 10、生成图片

os = new FileOutputStream(targerPath)

ImageIO.write(buffImg, "JPG", os)

System.out.println("图片完成添加水印文字")

} catch (Exception e) {

e.printStackTrace()

} finally {

try {

if (null != is)

is.close()

} catch (Exception e) {

e.printStackTrace()

}

try {

if (null != os)

os.close()

} catch (Exception e) {

e.printStackTrace()

}

}

}

/**

* 在图片上打印文字

*

* @param srcImg

* @param buffImg

* @param logoText

* @return

*/

private static void printText(Image srcImg, BufferedImage buffImg,

String logoText, Integer positionX, Integer PositionY) {

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(logoText, positionX, PositionY)

// 9、释放资源

g.dispose()

}

}

这门课一共有12个章节。包括:第一章Java语言与面向对象的程序设计,第二章简单的Java程序,第三章数据运算、流控制和数组,第四章类、包和接口,第五章深入理解Java语言,第六章异常处理,第七章工具类及常用算法,第八章多线程,第九章流、文件及基于文本的应用,第十章图形用户界面,第十一章网络、多媒体、数据库编程,第十二章怎样写好程序(*),。