「java文字转logo」java文字转语音真人发声
今天给各位分享java文字转logo的知识,其中也会对java文字转语音真人发声进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
java根据文字旋转图片方法
1、java本身肯定有这样的api来实现基本的文字转图片功能,果不其然,经过一番简单搜索,发现java.awt.Graphics类有一个方法,如下
2、经过简单测试,发现上述方法果然只能实现基本的文字转图片功能,无法换行,然后搜到一篇博文java文字转换成图片输出,算是一个比较完整的demo了,笔者的最终代码就是在此文代码的基础上修改而成,此demo中的文字也就一行不到的文字,所以无法看到换行的效果
3、刚开始打出来的图片上文字是方块乱码,解决方法是先在jdk目录下添加相应字体,如果依然乱码,要修改ide编辑器bin目录下的配置文件
4、为了实现真正的换行效果,笔者在drawstring方法外围加了一个for循环,就可以实现换行效果
5、如果文字过多的话,可能一张图片放不下,之前的做法是图片的高度不固定,根据文字的行数来确定,发现那样做的话,文字非常多的话图片就非常长,所以还是要生成多张图片,图片的张数就通过文字的总行数除以每张图片(固定宽高)的行数来得到
6、如果一行文字过多的话,超过图片宽度的文字会被隐藏掉,所以需要提前对文字进行处理,使用集合list来处理,先获取每个字的宽度,再获取每行能放多少字,再判断如果一行文字大于每行能存放的字数时,就进行切割处理
怎样用JAVA实现电子印章
参考如下代码
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() {
MapString, String value = new HashMapString, 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(MapString, String value,
MapString, 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、得到画笔对象
IteratorString 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();
}
}
java怎么给word文档加水印
可以使用Free Spire.Doc for Java在word文档中添加文本水印或图片水印。Free Spire.Doc for Java下载链接:网页链接
1.添加文本水印——代码如下:
import com.spire.doc.*;
import com.spire.doc.documents.WatermarkLayout;
import java.awt.*;
public class WordTextWatermark {
public static void main(String[] args) {
Document document = new Document();
document.loadFromFile("Sample.docx");
insertTextWatermark(document.getSections().get(0));
}
private static void insertTextWatermark(Section section) {
TextWatermark txtWatermark = new TextWatermark();
txtWatermark.setText("内部使用");
txtWatermark.setFontSize(40);
txtWatermark.setColor(Color.red);
txtWatermark.setLayout(WatermarkLayout.Diagonal);
section.getDocument().setWatermark(txtWatermark);
}
}
2.添加图片水印——代码如下:
import com.spire.doc.*;
public class WordImageWatermark {
public static void main(String[] args) throws Exception{
Document document = new Document();
document.loadFromFile("Sample.docx");
PictureWatermark picture = new PictureWatermark();
picture.setPicture("logo.png");
picture.setScaling(5);
picture.isWashout(false);
document.setWatermark(picture);
document.saveToFile("out/result2.docx",FileFormat.Docx )
}
}
java怎么生成带logo二维码
1、下载生成二维码所需要的jar包qrcode.jar;
2、直接上生成二维码的java代码
//需要导入的包
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;
/**
* 生成二维码(QRCode)图片
* @param content 二维码图片的内容
* @param imgPath 生成二维码图片完整的路径
* @param ccbpath 二维码图片中间的logo路径
*/
public static int createQRCode(String content, String imgPath,String ccbPath) {
try {
Qrcode qrcodeHandler = new Qrcode();
qrcodeHandler.setQrcodeErrorCorrect('M');
qrcodeHandler.setQrcodeEncodeMode('B');
qrcodeHandler.setQrcodeVersion(7);
// System.out.println(content);
byte[] contentBytes = content.getBytes("gb2312");
//构造一个BufferedImage对象 设置宽、高
BufferedImage bufImg = new BufferedImage(140, 140, BufferedImage.TYPE_INT_RGB);
Graphics2D gs = bufImg.createGraphics();
gs.setBackground(Color.WHITE);
gs.clearRect(0, 0, 140, 140);
// 设定图像颜色 BLACK
gs.setColor(Color.BLACK);
// 设置偏移量 不设置可能导致解析出错
int pixoff = 2;
// 输出内容 二维码
if (contentBytes.length 0 contentBytes.length 120) {
boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
for (int i = 0; i codeOut.length; i++) {
for (int j = 0; j codeOut.length; j++) {
if (codeOut[j][i]) {
gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
}
}
}
} else {
System.err.println("QRCode content bytes length = "
+ contentBytes.length + " not in [ 0,120 ]. ");
return -1;
}
Image img = ImageIO.read(new File(ccbPath));//实例化一个Image对象。
gs.drawImage(img, 55, 55, 30, 30, null);
gs.dispose();
bufImg.flush();
// 生成二维码QRCode图片
File imgFile = new File(imgPath);
ImageIO.write(bufImg, "png", imgFile);
}catch (Exception e){
e.printStackTrace();
return -100;
}
return 0;
}
来自网友 孤独青鸟的博客
java生成的二维码中间logo怎么改成文字
package com.luo.wctweb.util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.lz.lsf.util.Base64;
/** * @Description: (二维码) * @author:luoguohui * @date:2015-10-29 下午05:27:13 */
public class ZXingCode {
private static final int QRCOLOR = 0xFF000000; //默认是黑色
private static final int BGWHITE = 0xFFFFFFFF; //背景颜色
public static void main(String[] args) throws WriterException
{
try
{
getLogoQRCode("", null, "跳转到百度的二维码");
}
catch (Exception e)
{
e.printStackTrace();
}
}
/** * 生成带logo的二维码图片 * * @param qrPic * @param logoPic */
public static String getLogoQRCode(String qrUrl,HttpServletRequest request,String productName)
{
// String filePath = request.getSession().getServletContext().getRealPath("/") + "resources/images/logoImages/llhlogo.png";
//filePath是二维码logo的路径,但是实际中我们是放在项目的某个路径下面的,所以路径用上面的,把下面的注释就好
String filePath = "C:/Users/luoguohui/Desktop/78310a55b319ebc4fa3aef658126cffc1f17168f.jpg"; //TODO
String content = qrUrl;
try
{
ZXingCode zp = new ZXingCode();
BufferedImage bim = zp.getQR_CODEBufferedImage(content, BarcodeFormat.QR_CODE, 400, 400, zp.getDecodeHintType());
return zp.addLogo_QRCode(bim, new File(filePath), new LogoConfig(), productName);
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
/** * 给二维码图片添加Logo * * @param qrPic * @param logoPic */
public String addLogo_QRCode(BufferedImage bim, File logoPic, LogoConfig logoConfig, String productName)
{
try
{
/** * 读取二维码图片,并构建绘图对象 */
BufferedImage image = bim;
Graphics2D g = image.createGraphics();
/** * 读取Logo图片 */
BufferedImage logo = ImageIO.read(logoPic);
/** * 设置logo的大小,本人设置为二维码图片的20%,因为过大会盖掉二维码 */
int widthLogo = logo.getWidth(null)image.getWidth()*3/10?(image.getWidth()*3/10):logo.getWidth(null),
heightLogo = logo.getHeight(null)image.getHeight()*3/10?(image.getHeight()*3/10):logo.getWidth(null);
/** * logo放在中心 */
int x = (image.getWidth() - widthLogo) / 2;
int y = (image.getHeight() - heightLogo) / 2;
/** * logo放在右下角 * int x = (image.getWidth() - widthLogo); * int y = (image.getHeight() - heightLogo); */
//开始绘制图片
g.drawImage(logo, x, y, widthLogo, heightLogo, null);
// g.drawRoundRect(x, y, widthLogo, heightLogo, 15, 15);
// g.setStroke(new BasicStroke(logoConfig.getBorder()));
// g.setColor(logoConfig.getBorderColor());
// g.drawRect(x, y, widthLogo, heightLogo);
g.dispose();
//把商品名称添加上去,商品名称不要太长哦,这里最多支持两行。太长就会自动截取啦
if (productName != null !productName.equals("")) {
//新的图片,把带logo的二维码下面加上文字
BufferedImage outImage = new BufferedImage(400, 445, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D outg = outImage.createGraphics();
//画二维码到新的面板
outg.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
//画文字到新的面板
outg.setColor(Color.BLACK);
outg.setFont(new Font("宋体",Font.BOLD,30)); //字体、字型、字号
int strWidth = outg.getFontMetrics().stringWidth(productName);
if (strWidth 399) {
// //长度过长就截取前面部分
// outg.drawString(productName, 0, image.getHeight() + (outImage.getHeight() - image.getHeight())/2 + 5 ); //画文字
//长度过长就换行
String productName1 = productName.substring(0, productName.length()/2);
String productName2 = productName.substring(productName.length()/2, productName.length());
int strWidth1 = outg.getFontMetrics().stringWidth(productName1);
int strWidth2 = outg.getFontMetrics().stringWidth(productName2);
outg.drawString(productName1, 200 - strWidth1/2, image.getHeight() + (outImage.getHeight() - image.getHeight())/2 + 12 );
BufferedImage outImage2 = new BufferedImage(400, 485, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D outg2 = outImage2.createGraphics();
outg2.drawImage(outImage, 0, 0, outImage.getWidth(), outImage.getHeight(), null);
outg2.setColor(Color.BLACK);
outg2.setFont(new Font("宋体",Font.BOLD,30)); //字体、字型、字号
outg2.drawString(productName2, 200 - strWidth2/2, outImage.getHeight() + (outImage2.getHeight() - outImage.getHeight())/2 + 5 );
outg2.dispose();
outImage2.flush();
outImage = outImage2;
}else {
outg.drawString(productName, 200 - strWidth/2 , image.getHeight() + (outImage.getHeight() - image.getHeight())/2 + 12 ); //画文字
}
outg.dispose();
outImage.flush();
image = outImage;
}
logo.flush();
image.flush();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.flush();
ImageIO.write(image, "png", baos);
//二维码生成的路径,但是实际项目中,我们是把这生成的二维码显示到界面上的,因此下面的折行代码可以注释掉
//可以看到这个方法最终返回的是这个二维码的imageBase64字符串
//前端用 img src="data:image/png;base64,${imageBase64QRCode}"/ 其中${imageBase64QRCode}对应二维码的imageBase64字符串
ImageIO.write(image, "png", new File("C:/Users/luoguohui/Desktop/TDC-" + new Date().getTime() + "test.png")); //TODO
String imageBase64QRCode = Base64.byteArrayToBase64(baos.toByteArray());
baos.close();
return imageBase64QRCode;
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
/** * 构建初始化二维码 * * @param bm * @return */
public BufferedImage fileToBufferedImage(BitMatrix bm)
{
BufferedImage image = null;
try
{
int w = bm.getWidth(), h = bm.getHeight();
image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
for (int x = 0; x w; x++)
{
for (int y = 0; y h; y++)
{
image.setRGB(x, y, bm.get(x, y) ? 0xFF000000 : 0xFFCCDDEE);
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
return image;
}
/** * 生成二维码bufferedImage图片 * * @param content * 编码内容 * @param barcodeFormat * 编码类型 * @param width * 图片宽度 * @param height * 图片高度 * @param hints * 设置参数 * @return */
public BufferedImage getQR_CODEBufferedImage(String content, BarcodeFormat barcodeFormat, int width, int height, MapEncodeHintType, ? hints)
{
MultiFormatWriter multiFormatWriter = null;
BitMatrix bm = null;
BufferedImage image = null;
try
{
multiFormatWriter = new MultiFormatWriter();
// 参数顺序分别为:编码内容,编码类型,生成图片宽度,生成图片高度,设置参数
bm = multiFormatWriter.encode(content, barcodeFormat, width, height, hints);
int w = bm.getWidth();
int h = bm.getHeight();
image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
// 开始利用二维码数据创建Bitmap图片,分别设为黑(0xFFFFFFFF)白(0xFF000000)两色
for (int x = 0; x w; x++)
{
for (int y = 0; y h; y++)
{
image.setRGB(x, y, bm.get(x, y) ? QRCOLOR : BGWHITE);
}
}
}
catch (WriterException e)
{
e.printStackTrace();
}
return image;
}
/** * 设置二维码的格式参数 * * @return */
public MapEncodeHintType, Object getDecodeHintType()
{
// 用于设置QR二维码参数
MapEncodeHintType, Object hints = new HashMapEncodeHintType, Object();
// 设置QR二维码的纠错级别(H为最高级别)具体级别信息
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
// 设置编码方式
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
hints.put(EncodeHintType.MARGIN, 0);
hints.put(EncodeHintType.MAX_SIZE, 350);
hints.put(EncodeHintType.MIN_SIZE, 100);
return hints;
}
}
class LogoConfig
{
// logo默认边框颜色
public static final Color DEFAULT_BORDERCOLOR = Color.WHITE;
// logo默认边框宽度
public static final int DEFAULT_BORDER = 2;
// logo大小默认为照片的1/5
public static final int DEFAULT_LOGOPART = 5;
private final int border = DEFAULT_BORDER;
private final Color borderColor;
private final int logoPart;
/** * Creates a default config with on color {@link #BLACK} and off color * {@link #WHITE}, generating normal black-on-white barcodes. */
public LogoConfig()
{
this(DEFAULT_BORDERCOLOR, DEFAULT_LOGOPART);
}
public LogoConfig(Color borderColor, int logoPart)
{
this.borderColor = borderColor;
this.logoPart = logoPart;
}
public Color getBorderColor()
{
return borderColor;
}
public int getBorder()
{
return border;
}
public int getLogoPart()
{
return logoPart;
}
}
关于java文字转logo和java文字转语音真人发声的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。