精华内容
下载资源
问答
  • 想要将图片做成二维码? 其实很简单。 你只需要一个二维码生成器就能做到。 比如,这个业界小有名声的二维彩虹二维码生成器。 比如企业活动中,要展示多张图片;比如你想要将喜欢的插画作品保存并分享;比如你要存储...

    想要将图片做成二维码?

    其实很简单。

    你只需要一个二维码生成器就能做到。

    比如,这个业界小有名声的二维彩虹二维码生成器。

    比如企业活动中,要展示多张图片;比如你想要将喜欢的插画作品保存并分享;比如你要存储自己的摄影作品;比如你要提交作品集;比如展览中向游客展示创作过程;比如家庭照片分享;比如向学生发送学习资料…

    只要有了二维码,你就可以直接轻松分享查看啦。

    那么如何制作图片二维码呢?

    二维彩虹二维码生成器将图片生成二维码有两种方法

    第一种:“文件”功能

    1、注册登录二维彩虹二维码生成器
    在这里插入图片描述

    2、选择“文件”选项
    提前将所有图片和文字整理成pdf或文档等文件通过这里上传。也可以单独将一张图片上传生成一个二维码。
    在这里插入图片描述

    3、点击生成动态二维码即可,然后可对二维码的外观再进行美化设计

    4、测试扫描之后,就可以下载使用了。
    在这里插入图片描述

    第二种:“H5编辑”功能
    1、注册登录二维彩虹二维码生成器官网
    在这里插入图片描述

    2、选择“H5编辑”功能,对页面标题进行命名,并简单描述下图片呈现内容,可以同时上传展示多张图片。

    在这里插入图片描述

    3、点击生成动态二维码即可,并对二维码进行不同角度的美化,可以自定义样式、图眼、logo、颜色、边框。

    4、扫描二维码预览下图片页面,如果通过滑块模式上传多图,那么最后会以全屏轮播模式展现图片。
    在这里插入图片描述
    在这里插入图片描述

    5、最后下载应用二维码即可,

    二维彩虹二维码除了可以把照片放入二维码,还可以将视频、音频、链接、文档、名片、WiFi、应用商店、收款码等内容制作成二维码。其中所生成的动态二维码可以随时修改二维码内容,但二维码不变,修改内容后无需重新印刷二维码。

    关于二维彩虹

    二维彩虹作为一家拥有全球十万+用户的二维码生成器公司,是国内首家专注于为世界120余个国家地区提供二维码美化与数据追踪服务的大数据解决方案供应商,深受全球用户的信任。

    在二维彩虹,你还可以制作多种类型的二维码。比如网页链接二维码、电子名片二维码、pdf二维码、多文件二维码、多链接二维码、聚合收款二维码、应用商店二维码、电商店铺二维码、wifi二维码、音频二维码、视频二维码等。

    在产品推广、市场营销、活动展览现场讲解展示、资料传阅、产品使用说明、私域引流、线上售票、教育培训、餐厅自助下单、售后客服等方面,广泛应用二维码。极大地提升了信息传播和触达的效率。

    原文阅读:
    图片二维码,如何将图片制作成二维码

    相关阅读:
    如何将PPT制成二维码?

    展开全文
  • 一个简单的javaweb项目 使用Rrcode 根据内容创建二维码 并在二维码中间添加logo 和二维码下方添加二维码描述

    一个简单的javaweb项目

    注释比较多直接上代码 附上使用的jar包Qrcode

    package com.fehorizon.erp.pda.utils;
    
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.File;
    
    import javax.imageio.ImageIO;
    
    import com.fehorizon.erp.pda.base.BaseService;
    import com.swetake.util.Qrcode;
    /**
     *  二维码创建
     * @author yhzm
     *
     */
    public class printServiceImpl extends BaseService {
    	 public void barCodeGenera() {
    		 	init(false);
    		 	//先创建一个二维码
    		 	String text = strRequiredParam("barcode","二维码信息");
    		 	String desc = strRequiredParam("desc","文字内容");//二维码下面的文字描述 
    		 	String logoPath = "d:\\aa.png";//二维码的logo地址
                int logoWidth = 40; //logo的宽
                int logoHeight = 40;  //logo的高
                try{
    		 		Qrcode qrcode = new Qrcode();
    		 		qrcode.setQrcodeErrorCorrect('M');//设置纠错等级(分为:L、M、H三个等级)
    		 		qrcode.setQrcodeEncodeMode('B');//N代表数字、A代表a-Z、B代表其他字符
    		 		qrcode.setQrcodeVersion(7);//设置版本
    		 		
    		 		int width = 67+12*(7-1);//设置二维码的宽  二维码像素的大小和版本号有关  但是版本号越大   二维码也越是复杂  这个需要注意
    		 		int height = 67+12*(7-1);//设置二维码的高
    		 		//将内容变为特定UTF-8格式编码的字节码
    		 		byte [] qrData = text.getBytes("UTF-8");
    		 		
    		 		BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
    		 		//创造画笔
    		 		Graphics2D gs = bufferedImage.createGraphics();
    		 		gs.setBackground(Color.WHITE);//设置背景
    		 		gs.setColor(Color.BLACK);//设置画笔颜色
    		 		gs.clearRect(0, 0, width, height);//清除画板内容
    		 		//设置偏移量
    		 		int pixoff = 2;
    		 		boolean [][] d = qrcode.calQrcode(qrData);
    		 		for(int y=0;y<d.length;y++) {
    		 			for(int x=0;x<d.length;x++) {
    		 				if(d[x][y]) {
    		 					gs.fillRect(x*3+pixoff, y*3+pixoff, 3, 3);
    		 				}
    		 			}
    		 		}
    		 		gs.dispose();
    		        BufferedImage bm = bufferedImage;//二维码  
    		        File logoFile = new File(logoPath); //logo图片   
    	            BufferedImage logoImg = ImageIO.read(logoFile);  
    	            /* float ratio = 0.5;   //倒圆角
    	             if(ratio>0){  
    	                 logoWidth = logoWidth>width*ratio ? (int)(width*ratio) : logoWidth;  
    	                 logoHeight = logoHeight>height*ratio ? (int)(height*ratio) : logoHeight;  
    	             }  */
    	            int x = (width-logoWidth)/2;  
    	            int y = (height-logoHeight)/2;  
    	            Graphics g = bm.getGraphics();  
    	            g.drawImage(logoImg, x, y, logoWidth, logoHeight, null);  
    	            int whiteWidth = 0;  //白边
    	            Font font = new Font("黑体", Font.BOLD, 12);  
    	            int fontHeight = g.getFontMetrics(font).getHeight();//得到字体的高度  
    	            //计算需要多少行  
    	            int lineNum = 1;  
    	            int currentLineLen = 0;  
    	            for(int i=0;i<desc.length();i++){  
    	                char c = desc.charAt(i);  
    	                int charWidth = g.getFontMetrics(font).charWidth(c); 
    	                //循环文字得到文字区域的行数
    	                if(currentLineLen+charWidth>width){  
    	                    lineNum++;  
    	                    currentLineLen = 0;  
    	                    continue;  
    	                }  
    	                currentLineLen += charWidth;  
    	            }  
    	            int totalFontHeight = fontHeight*lineNum; //得到文字区域的高度 
    	            int wordTopMargin = 4;  
    	            BufferedImage bm1 = new BufferedImage(width, height+totalFontHeight+wordTopMargin-whiteWidth, BufferedImage.TYPE_INT_RGB); //创建将文字高度计算到其中的图片 
    	            Graphics g1 = bm1.getGraphics();   
    	            g1.setColor(Color.WHITE);  
    	            g1.fillRect(0, height, width, totalFontHeight+wordTopMargin-whiteWidth); //将文字部分的背景填充成白色 
    	            g1.setColor(Color.black);  
    	            g1.setFont(font);  
    	            g1.drawImage(bm, 0, 0, null); //将创建好的二维码从起点(0,0)开始画在图中 
    	            int currentLineIndex = 0;  
    	            //判断是否只有一行,只有一行就居中显示
    	            currentLineLen = lineNum-1==currentLineIndex?(width-g.getFontMetrics(font).stringWidth(desc))/2:0;
    	            int baseLo = g1.getFontMetrics().getAscent();  
                    for(int i=0;i<desc.length();i++){  
                        String c = desc.substring(i, i+1);  
                        int charWidth = g.getFontMetrics(font).stringWidth(c); 
                        //判断是否需要换行
                        if(currentLineLen+charWidth>width){  
                            currentLineIndex++;  
                            //判断是否是最后一行  最后一行居中显示
                            currentLineLen = lineNum-1==currentLineIndex?(width-g.getFontMetrics(font).stringWidth(desc.substring(i)))/2:0;
                            g1.drawString(c, currentLineLen + whiteWidth, height+baseLo+fontHeight*(currentLineIndex)+wordTopMargin);//将单个文字画到对应位置 
                            currentLineLen = charWidth;  
                            continue;  
                        }  
                        g1.drawString(c, currentLineLen+whiteWidth, height+baseLo+fontHeight*(currentLineIndex) + wordTopMargin);  
                        currentLineLen += charWidth;  
                    } 
    	            g1.dispose();  
    	            bm = bm1;
    	 		response.setContentType("image/jpeg");
    	 		//好了 ,现在通过IO流来传送数据
    	        ImageIO.write(bm , "JPEG", response.getOutputStream());
            }catch(Throwable e){  
                e.printStackTrace();  
            }  
        }
    }
    
    

    效果图

    展开全文
  • 最近接了一个新的任务,生成电梯标识牌...4:将二维码图下面的文字信息放入模板中居中 5:将救援码放入119下面 基本思路就是以上5步,废话不多说,直接上代码 import java.awt.BasicStroke; import java.awt.C...
    最近接了一个新的任务,生成电梯标识牌,里面的内容如下图所示:
    

    在这里插入图片描述
    成品如上图。
    大致思路如下:
    1:美工做好模板图
    2:java生成内嵌logo的二维码
    3:将生成好的二维码放入模板图中
    4:将二维码图下面的文字信息放入模板图中居中
    5:将救援码放入119下面
    基本思路就是以上5步,废话不多说,直接上代码

    import java.awt.BasicStroke;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.Shape;
    import java.awt.geom.RoundRectangle2D;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    import java.util.Hashtable;
    import java.util.Random;
    
    import javax.imageio.ImageIO;
    
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.BinaryBitmap;
    import com.google.zxing.DecodeHintType;
    import com.google.zxing.EncodeHintType;
    import com.google.zxing.MultiFormatReader;
    import com.google.zxing.MultiFormatWriter;
    import com.google.zxing.Result;
    import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
    import com.google.zxing.common.BitMatrix;
    import com.google.zxing.common.HybridBinarizer;
    import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;
    
    public class QRCodeUtil {
    		
    		private static final String CHARSET = "utf-8";
    	    private static final String FORMAT_NAME = "JPG";
    	    private static final int QRCODE_SIZE = 530; // 二维码尺寸,宽度和高度均是530
    	    private static final int WIDTH = 136;  //LOGO宽度
    	    private static final int HEIGHT = 136; //LOGO高度
    	    /**
    	     * 生成二维码的方法
    	     * @param content 目标url
    	     * @param imgPath logo图片地址
    	     * @param needCompress 是否压缩logo
    	     * @return 二维码图片
    	     * @throws Exception
    	     */
    	    private static BufferedImage createImage(String content, String imgPath,boolean needCompress) throws Exception {
    			Hashtable hints = new Hashtable();
    			hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);//指定二维码的纠错等级为高级H
    			hints.put(EncodeHintType.CHARACTER_SET, CHARSET);//指定字符编码为“utf-8”
    			hints.put(EncodeHintType.MARGIN, 2); //设置图片的边距
    			//参数1:内容,目标url,参数2:固定写法,参数3:二维码的宽度,参数4:二维码的高度,参数5:二维码属性设置
    			BitMatrix bitMatrix = new MultiFormatWriter().encode(content,BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints);
    			int width = bitMatrix.getWidth();//二维码的宽度
    			int height = bitMatrix.getHeight();//二维码的高度
    			BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);//生成的二维码image
    			for (int x = 0; x < width; x++) {
    				for (int y = 0; y < height; y++) {
    					image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000: 0xFFFFFFFF);
    				}
    			}
    			if (imgPath == null || "".equals(imgPath)) {//logo图片地址为null或空时
    				return image; //只返回二维码图片,无中间的logo
    			}
    			// 插入logo图片  参数1:二维码图片,参数2:logo图片地址,参数3:压缩图片
    			QRCodeUtil.insertImage(image, imgPath, needCompress);
    			return image;
    		}
    	    /**
    	     * 插入logo图片
    	     * @param source 二维码图片
    	     * @param imgPath LOGO图片地址
    	     * @param needCompress 是否压缩
    	     * @throws Exception
    	     */
    	    private static void insertImage(BufferedImage source, String imgPath,boolean needCompress) throws Exception {
    	    	  File file = new File(imgPath);//logo图片地址放入文件
    	          if (!file.exists()) {
    	              System.err.println("" + imgPath + " 该文件不存在!");
    	              return;
    	          }
    	          Image src = ImageIO.read(new File(imgPath));
    	          int width = src.getWidth(null);
    	          int height = src.getHeight(null);
    	          if (needCompress) { // 压缩LOGO
    	              if (width > WIDTH) { //如果上传logo宽 >60
    	                  width = WIDTH;
    	              }
    	              if (height > HEIGHT) { //如果上传logo高>60
    	                  height = HEIGHT;
    	              }
    	              Image image = src.getScaledInstance(width, height,Image.SCALE_SMOOTH);
    	              BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
    	              Graphics g = tag.getGraphics();
    	              g.drawImage(image, 0, 0, null); // 绘制缩小后的图
    	              g.dispose();
    	              src = image;
    	          }
    	          // 插入LOGO
    	          Graphics2D graph = source.createGraphics();
    	          int x = (QRCODE_SIZE - width) / 2;
    	          int y = (QRCODE_SIZE - height) / 2;
    	          graph.drawImage(src, x, y, width, height, null);
    	          Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6);
    	          graph.setStroke(new BasicStroke(3f));
    	          graph.draw(shape);
    	          graph.dispose();
    	       
    	    }
    测试生成二维码	    
     public class QRTest {
    	public static void main(String[] args) {
    		//生成二维码
    		String content= "http://www.baidu.com";
    		String imgPath="E:/QRCodeImage/logo.jpg";
    		String destPath ="E:/QRCodeImage/";
    		System.out.println("logo图片地址imgPath=="+imgPath);
    		System.out.println("存放二维码图片的地址destPath=="+destPath);
    		try {
    			QRCodeUtil.encode(content,imgPath,destPath, false);
    		} catch (Exception e1) {
    			e1.printStackTrace();
    		}
    	}
    }
    
    生成效果图
    public class TestImg {
    	
    	public static void main(String[] args) throws ParseException {
    //		二维码内容  signboardurl
    		String content= "http://baidu.com";
    		// 标识牌中logo图片的位置
    		String imgPath="E:/QRCodeImage/logo.jpg";
    		// 标识牌主图片路劲(最大的图片)
    		String mainFilePath = "E:/QRCodeImage/model.jpg";
    		// 标识牌生成的目标位置
    		String destPath ="E:/QRCodeImage/";
    		System.out.println("logo图片地址imgPath=="+imgPath);
    		System.out.println("存放二维码图片的地址destPath=="+destPath);
    		String imagefile = insertLogo(content,imgPath,destPath);
    		//二维码下方的电梯名称
    		String housingNameString = "西太湖高新区石墨烯科技产业园区";
    		String eleName = "研发车间4#东";
    		//电梯救援码
    		String codeString = "D3641";
    		String fileName = FileUtil.getUUID()+".jpg";
    		exportImg(housingNameString,eleName,codeString,imagefile,mainFilePath,fileName);
    	}
    	
    	
    	public static String insertLogo(String content,String imgPath,String destPath){
    		String imagefile = null;
    		try {
    			imagefile = QRCodeUtil.encode(content,imgPath,destPath, false);
    		} catch (Exception e1) {
    			e1.printStackTrace();
    		}
    		return imagefile;
    	}
    	
    	public static void exportImg1(){
    		int width = 100;   
            int height = 100;   
            String s = "你好";   
            File file = new File("d:/image.jpg");   
               
            Font font = new Font("Serif", Font.BOLD, 10);   
            BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);   
            Graphics2D g2 = (Graphics2D)bi.getGraphics();   
            g2.setBackground(Color.WHITE);   
            g2.clearRect(0, 0, width, height);   
            g2.setPaint(Color.RED);   
               
            FontRenderContext context = g2.getFontRenderContext();   
            Rectangle2D bounds = font.getStringBounds(s, context);   
            double x = (width - bounds.getWidth()) / 2;   
            double y = (height - bounds.getHeight()) / 2;   
            double ascent = -bounds.getY();   
            double baseY = y + ascent;   
               
            g2.drawString(s, (int)x, (int)baseY);   
               
            try {
    			ImageIO.write(bi, "jpg", file);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} 
    	}
    	
    	public static String exportImg(String housingname,String eleName,String liftCode,String headImg,String mainFilePath,String fileName){
    		try {
    			//1.jpg是你的 主图片的路径也就是模板图片路劲
    	        InputStream is = new FileInputStream(mainFilePath);
    	        
    	        //通过JPEG图象流创建JPEG数据流解码器
    	        JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(is);
    	        //解码当前JPEG数据流,返回BufferedImage对象
    	        BufferedImage buffImg = jpegDecoder.decodeAsBufferedImage();
    	        //得到画笔对象
    	        Graphics g = buffImg.getGraphics();
    	        
    	        //创建你要附加的图象。
    	        //小图片的路径
    	        ImageIcon imgIcon = new ImageIcon(headImg); 
    	        
    	        //得到Image对象。
    	        Image img = imgIcon.getImage();
    	        
    	        //将小图片绘到大图片上。
    	        //5,300 .表示你的小图片在大图片上的位置。
    	        g.drawImage(img,141,41,null);
    	        
    	        //设置颜色。
    	        g.setColor(Color.WHITE);
    	        
    	        //最后一个参数用来设置字体的大小
    //	        Font f = new Font("微软雅黑",Font.CENTER_BASELINE,40);
    	        CyFont cf = new CyFont();
    	        Font f = cf.getDefinedFont(2, 40.0f);
    	        Color mycolor = Color.WHITE;//new Color(0, 0, 255);
    	        g.setColor(mycolor);
    	        g.setFont(f);
    	        //居中显示
    //			int x=(int)(width/2-rate*g.getFontMetrics().stringWidth(username)/2);
    //			int y=height/2+g.getFontMetrics().getHeight()/3;
    	        
    	        if(housingname.length()>13){
    	        	eleName = housingname.substring(13)+eleName;
    	        	housingname = housingname.substring(0,13);
    	        }
    	        if(eleName.length()>13){
    	        	eleName = eleName.substring(0,13);
    	        }
    	        //10,20 表示这段文字在图片上的位置(x,y) .第一个是你设置的内容。
    	        drawStringWithFontStyleLineFeed(g,housingname,620,f);//小区信息
    	        drawStringWithFontStyleLineFeed(g,eleName,675,f);//电梯信息
    	        
    //	        f = new Font("方正兰亭特黑",Font.BOLD,110f);
    	        cf = new CyFont();
    	        f = cf.getDefinedFont(1, 110.0f);
    	        g.setColor(mycolor);
    	        g.setFont(f);
    	        
    	        //10,20 表示这段文字在图片上的位置(x,y) .第一个是你设置的内容。救援码
    	        g.drawString(liftCode,1295,670);
    	        g.dispose();
    	        
    	        
    	        OutputStream os;
    		
    	        String iamgePathString = FileUtil.getFilePath("image");
    	        String shareFileName = iamgePathString + fileName;
    			os = new FileOutputStream(shareFileName);
    			 //创键编码器,用于编码内存中的图象数据。	        
    	        JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os);
    	        en.encode(buffImg);	        
    	        System.out.println("exportImg success");
    	        is.close();
    	        os.close();
    	        return shareFileName;
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (ImageFormatException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
            return null;
    	}
    	
    	
    	private static void  drawStringWithFontStyleLineFeed(Graphics g, String strContent, int loc_Y, Font font){
    		//使文字居中的图片宽度
    		int rowWidth=650;
    		int loc_X = (rowWidth-(40*strContent.length()))/2 + 80;
            g.setFont(font);
            //获取字符串 字符的总宽度
            int strWidth =getStringLength(g,strContent);
            //每一行字符串宽度
            System.out.println("每行字符宽度:"+rowWidth);
            //获取字符高度
            int strHeight=getStringHeight(g);
            //字符串总个数
            System.out.println("字符串总个数:"+strContent.length());
            if(strWidth>rowWidth){
                int rowstrnum = getRowStrNum(strContent.length(),rowWidth,strWidth);
                int  rows= getRows(strWidth,rowWidth);
                String temp="";
                for (int i = 0; i < 2; i++) {
                    //获取各行的String 
                    if(i==rows-1){
                        //最后一行
                        temp=strContent.substring(i*rowstrnum,strContent.length());
                    }else{
                        temp=strContent.substring(i*rowstrnum,i*rowstrnum+rowstrnum);
                    }
                    if(i>0){
                        //第一行不需要增加字符高度,以后的每一行在换行的时候都需要增加字符高度
                        loc_Y=loc_Y+strHeight;
                    }
                    g.drawString(temp, loc_X, loc_Y);
                }
            }else{
                //直接绘制
                g.drawString(strContent, loc_X, loc_Y);
            }
            
        }
    	//每一行字符串宽度  自定义  也就是画布中一行的宽度
    //	int rowWidth=650;  
    
    	//字符串字符的个数 
    
    //	int strnum= str.length();
    	public static int  getStringLength(Graphics g,String str) {
            char[]  strcha=str.toCharArray();
            int strWidth = g.getFontMetrics().charsWidth(strcha, 0, str.length());
            System.out.println("字符总宽度:"+strWidth);
            return strWidth;
        }
    	public static int getRowStrNum(int strnum,int rowWidth,int strWidth){
    		int rowstrnum=0;
    		rowstrnum=(rowWidth*strnum)/strWidth;
    		System.out.println("每行的字符数:"+rowstrnum);
    		return rowstrnum;
    	}
    	public static  int  getRows(int strWidth,int rowWidth){
            int rows=0;
            if(strWidth%rowWidth>0){
                rows=strWidth/rowWidth+1;
            }else{
                rows=strWidth/rowWidth;
            }
            System.out.println("行数:"+rows);
            return rows;
    	 }
    	public static int  getStringHeight(Graphics g) {
            int height = g.getFontMetrics().getHeight();
            System.out.println("字符高度:"+height);
            return height;
    	 }
    	
    	public static void pressText(Graphics g,String pressText, int fontStyle, Color color, int fontSize,int startX,int startY) {
    		int WIDTH = 650;
    		int HEIGHT = 530;
            //计算文字开始的位置
            //x开始的位置:(图片宽度-字体大小*字的个数)/2
            startX = (WIDTH-(fontSize*pressText.length()))/2 +65;
            //y开始的位置:图片高度-(图片高度-图片宽度)/2
    //        int startY = HEIGHT-(HEIGHT-WIDTH)/2 - 270;
    
            try {
    //            File file = new File(targetImg);
    //            Image src = ImageIO.read(file);
    //            int imageW = src.getWidth(null);
    //            int imageH = src.getHeight(null);
    //            BufferedImage image = new BufferedImage(imageW, 350, BufferedImage.TYPE_INT_ARGB);//TYPE_INT_ARGB 背景为透明的
    //            Graphics g = image.createGraphics();
    //            g.drawImage(src, 0, imageH-210, imageW, imageH, null);
                g.setColor(color);
                g.setFont(new Font(null, fontStyle, fontSize));
                g.drawString(pressText, startX, startY);
                g.dispose();
    
    //            FileOutputStream out = new FileOutputStream(newImg);
    //            ImageIO.write(image, "JPEG", out);
    //            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    //            encoder.encode(image);
    //            out.close();
    //            System.out.println("image press success");
            } catch (Exception e) {
                System.out.println(e);
            }
    
    	}
    }
    
    自定义字体
    import java.awt.Font;
    import java.awt.FontFormatException;
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    import com.zzy.sys.util.FileUtil;
    
    public class CyFont {
    	private  Font definedFont = null; 
    	
    	public  Font getDefinedFont(int ft,float fs) {
    		String fontUrl="";
    		String fontPathString = FileUtil.getFilePath("font");
    		switch (ft) {
    		case 1:
    			fontUrl=fontPathString+"ltth.ttf";//兰亭特黑
    			break;
    		case 2:
    			fontUrl=fontPathString+"black.ttf";//黑体粗
    			break;
    		default:
    			String fonturllocal="/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc";
    			if(!new File(fonturllocal).exists()){
    				fontUrl="/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc";
    			}else{
    				fontUrl=fonturllocal;
    			}
    			break;
    		}
            if (definedFont == null) {  
                InputStream is = null;  
                BufferedInputStream bis = null;  
                try {  
                    is =new FileInputStream(new File(fontUrl));
                    bis = new BufferedInputStream(is);  
                    definedFont = Font.createFont(Font.TRUETYPE_FONT, is);
                    //设置字体大小,float型
                   definedFont = definedFont.deriveFont(fs);
                } catch (FontFormatException e) {  
                    e.printStackTrace();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                } finally { 
                   try {  
                        if (null != bis) {  
                            bis.close();  
                        }  
                        if (null != is) {  
                            is.close();  
                        }  
                    } catch (IOException e) {  
                        e.printStackTrace();  
                    }
                }  
            }  
            return definedFont;  
        }  
    	
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		CyFont cf=new CyFont();
    		cf.getDefinedFont(1, 50.0f);
    		
    	}
     
    }
    

    至此,功能完结,如有更新 ,我会及时补充上来。

    展开全文
  • 对之前的添加二维码水印功能进行完善,之前的程序生成的二维码图片背景不是透明的,所以不是很美观,所以本博客对程序进行完善,对二维码图片设置背景为透明的,不过这样美观了,但是很有可能出现遮住pdf文字或者...

    继之前的博客:PDF文件添加二维码水印教程图片添加二维码水印教程之后,对之前的添加二维码水印功能进行完善,之前的程序生成的二维码图片背景不是透明的,所以不是很美观,所以本博客对程序进行完善,对二维码图片设置背景为透明的,不过这样美观了,但是很有可能出现遮住pdf文字或者图片的情况,这种情况会导致二维码不能扫描

    参考网上教程,封装个方法调用

    
    /**
         * 设置图片背景透明
         * @date   2019年6月27日下午8:46:42
         * @param srcImage
         * @param alpha
         * @return
         * @throws IOException
         */
        public static BufferedImage transparentImage(BufferedImage srcImage,
                int alpha) throws IOException {
            int imgHeight = srcImage.getHeight();//取得图片的长和宽
            int imgWidth = srcImage.getWidth();
            int c = srcImage.getRGB(3, 3);
            //防止越位
            if (alpha < 0) {
                  alpha = 0;
            } else if (alpha > 10) {
                  alpha = 10;
            }
            BufferedImage tmpImg = new BufferedImage(imgWidth, imgHeight,BufferedImage.TYPE_4BYTE_ABGR);//新建一个类型支持透明的BufferedImage
            for(int i = 0; i < imgWidth; ++i)//把原图片的内容复制到新的图片,同时把背景设为透明
            {
                 for(int j = 0; j < imgHeight; ++j){
                     //把背景设为透明
                     if(srcImage.getRGB(i, j) == c){
                           tmpImg .setRGB(i, j, c & 0x00ffffff);
                     }
                      //设置透明度
                     else{
                          int rgb = tmpImg .getRGB(i, j);
                          rgb = ((alpha * 255 / 10) << 24) | (rgb & 0x00ffffff);
                          tmpImg .setRGB(i, j, rgb);
                      }
                  }
            }
            return tmpImg ;
        }
    

    然后对之前程序改进,主要对bufferImage进行调整,

        // 设置透明背景
        image = transparentImage(image,10);
    
    /**
         * 为PDF附件添加图片水印
         * @author nicky.ma
         * @date   2019/6/11 12:00:32
         * @param bos 输出文件的位置
         * @param input 输入文件流
         * @param image 水印图片
         */
        public static void setWatermarkForPDF(BufferedOutputStream bos, InputStream input, BufferedImage image)
                throws  IOException, DocumentException {
            PdfReader reader = new PdfReader(input);
            PdfStamper stamper = new PdfStamper(reader, bos);
            //int total = reader.getNumberOfPages() + 1;
            PdfContentByte waterMar;
            
            PdfGState gs = new PdfGState();
            long startTime = System.currentTimeMillis();
            System.out.println("PDF加图片水印 start");
            //for (int i = 1; i < total; i++) {
                waterMar = stamper.getOverContent(1);// 在内容上方加水印
                //waterMar = stamper.getUnderContent(1);//在内容下方加水印
                // 设置图片透明度为0.2f
                //gs.setFillOpacity(0.2f);
                // 设置笔触字体不透明度为0.4f
                //gs.setStrokeOpacity(0.4f);
                // 开始水印处理
                waterMar.beginText();
                // 设置透明度
                waterMar.setGState(gs);
                // 设置水印字体参数及大小
                //waterMar.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED), 60);
                // 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度
                //waterMar.showTextAligned(Element.ALIGN_CENTER, "公司内部文件,请注意保密!",  500, 430, 45);
                // 设置水印颜色
                //waterMar.setColorFill(BaseColor.GRAY);
                // 设置透明背景
                image = transparentImage(image,10);
                // 创建水印图片
                com.itextpdf.text.Image itextimage = getImage(image,100);
                // 水印图片位置
                itextimage.setAbsolutePosition(2100,1400); 
                // 边框固定
                itextimage.scaleToFit(200, 200);
                // 设置旋转弧度
                //image.setRotation(30);// 旋转 弧度
                // 设置旋转角度
                //image.setRotationDegrees(45);// 旋转 角度
                // 设置等比缩放
                //itextimage.scalePercent(90);
                // 自定义大小
                itextimage.scaleAbsolute(200,200);
                // 附件加上水印图片
                waterMar.addImage(itextimage);
                // 完成水印添加
                waterMar.endText();
                // stroke
                waterMar.stroke();
            //}
            long endTime = System.currentTimeMillis();
            System.out.println("PDF加图片水印 ok 所用时间:"+(endTime-startTime)+"s");
            stamper.close();
            reader.close();
        }
    

    然后还需要修改:

    这里不需要设置颜色,传个null就可以

                itextImage=com.itextpdf.text.Image.getInstance(bufferedImage,null);
    

    修改后代码,原来程序参考PDF文件添加二维码水印教程

    
            public static com.itextpdf.text.Image getImage(BufferedImage bufferedImage,float percent){
            com.itextpdf.text.Image itextImage=null;
            try {
                itextImage=com.itextpdf.text.Image.getInstance(bufferedImage,null);
            } catch (BadElementException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            itextImage.setWidthPercentage(0.1f);
            itextImage.setSpacingAfter(0.1f);
            itextImage.scalePercent(percent);
            itextImage.setBorder(Rectangle.NO_BORDER);
            return itextImage;
        }
    

    上面是针对pdf的修缮,然后再对图片的二维码修改

    这里只要调用封装好的方法就可以

        //设置二维码图片背景透明
          bufferedImage = transparentImage(bufferedImage,10);

    参考代码,具体实现要参考之前代码

    
        /**
         * 给图片添加水印、可设置水印图片旋转角度
         * @author mazq
         * @date   2019年6月12日下午2:11:11
         * @param bufferedImage
         *          水印图片
         * @param in
         *          获取附件上传stream
         * @param os
         *          附件保存stream
         * @param degree
         *          选择角度
         * @param imgType
         *          上传附件的类型
         */
        public static void setWaterMarkForIMG(BufferedImage bufferedImage, InputStream in, OutputStream os, Integer degree,String imgType) {
            //OutputStream os = null;
            long startTime = System.currentTimeMillis();
            System.out.println("图片附件添加图片水印 start");
            try {
                Image srcImg = ImageIO.read(in);
                BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null), srcImg.getHeight(null),
                        BufferedImage.TYPE_INT_RGB);
                // 得到画笔对象
                // Graphics g= buffImg.getGraphics();
                Graphics2D g = buffImg.createGraphics();
                // 设置对线段的锯齿状边缘处理
                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);
                if (null != degree) {
                    // 设置水印旋转
                    g.rotate(Math.toRadians(degree), (double) buffImg.getWidth() / 2, (double) buffImg.getHeight() / 2);
                }
                //float alpha = 0.2f; // 透明度
                //g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
                
                // 水印图象的路径 水印一般为gif或者png的,这样可设置透明度
                //ImageIcon imgIcon = new ImageIcon(iconPath);
                // 得到Image对象。
                //Image img = imgIcon.getImage();
                //设置二维码图片背景透明
                bufferedImage = transparentImage(bufferedImage,10);
                // 表示水印图片的位置
                g.drawImage(bufferedImage, buffImg.getWidth()-180, 0, null);
    
                g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
                g.dispose();
    
                //os = new FileOutputStream(targerPath);
                // 生成图片
                ImageIO.write(buffImg, imgType, os);
    
                long endTime = System.currentTimeMillis();
                System.out.println("图片附件添加图片水印 ok 所用时间:"+(endTime-startTime)+"s");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (null != os)
                        os.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    

    ps:本博客只是对之前两篇教程的补充,请先看之前两篇博客,再看这篇博客
    PDF文件添加二维码水印教程图片添加二维码水印教程

    转载于:https://www.cnblogs.com/mzq123/p/11105378.html

    展开全文
  • * @Description : 将二维码图片和文字生成到一张图片上 * @Param : originalImg 原 * @Param : qrCodeImg 二维码地址 * @Param : shareDesc 图片文字 * @return : java.lang.String * @Author : ...
  • 二维码 <img :src="codeIMG" alt /> 保存图片</el-button> </div> </div> </div> saveImg() { html2canvas(this.$refs.courseInfo).then(canvas => { // this.$refs.addImage.append(canvas);//在下面添加canvas...
  • 二维码图片详解(转)

    千次阅读 2013-07-02 10:33:23
    本文为翻译文章,英文原文请看这里[link],文中的QRcode中插入图片方法并非简单的利用容错,可以在保证识别正确率的同时加入非常大块的图像,文字等。正文如下———— QRcode是一种用来对字节符号进行编码的二维码...
  • 购物商城里面的商品分享给朋友的时候会生成一张海报图片,图片上附带这二维码图片,朋友拿到这张图片扫描上面的二维码就可以进入商品详情页查看此商品了。今天来一下这种功能,先生商品海报图片,然后长按这张...
  • 实现两个功能 ...2.仿淘宝海报保存图片到本地打开app时解析图片中的二维码得到消息(同上,如果不是可直接使用的则需要二次请求获取) 实现思路 1.文字分享信息(仿淘口令):打开app时会回调o...
  • 生成彩色二维码(渐变色、插入图片和文字

    万次阅读 热门讨论 2012-11-30 22:13:21
    下面是阶段性成果:渐变颜色、插入文字和log图片。 使二维码看起来更协调、更醒目。突出强调文字和logo,而不仅仅是一个信息的黑盒。 基于zxing的c#版本,稍微了点修改,改了version判断部分。 其他的是GDI+,...
  • 本篇将主要介绍如何生成一个既含LOGO又含底部文字二维码. 先展示一下最终成果,如下: 好,现在来说一说具体的实现思路. 可分为三个步骤来生成既含有LOGO又含有底部文字二维码: 第一步,实现LOGO图片的...
  • 效果先走一波 ##注意,使用了QRcoder.js 生成二维码 //以下是框架模板语言,可以自己换 原生php {$content = "[仅差";} {$content .= $groupbuylist->personrequired - $groupbuylist->personqty;} {...
  • npm install qrcodejs2 //生成二维码的包 npm install html2canvas //转为图片格式的包 重点部分1: //`生成二维码部分` new QRCode(this.$refs.qrCodeDiv,{ text:"http://19*.16*.12*.2*:8080/#/login?" + ...
  • 目录一、需求二、依赖导入三、ZXing生成二维码图片的工具类四、合成图片的工具类五、实践结语 一、需求   日常中一个很常见的小需求:把一个地址做成二维码码牌,比如商户收银,关注公众号等等。其实学习了java,...
  • java excel生成二维码(可以添加图标和文字) 代码完整! 下载就能用! 我博客 java 中有讲解例子!
  • 排版的难处在于,我们不是根据已经设计好的版面来填充内容(套模板),而是要根据具体的内容来布局版面,比如版面中的图片有时候是一两张,有时候是十张八张,由于构成元素的不同,导致采用同样的构图、版式、形式...
  • 验证码生成,二维码生成,SpringMVC 中的缩略生成和图片上传,SpringBoot 中的缩略生成和图片上传,定时器调度。
  • 二维码

    2015-03-02 15:46:21
    二维码能在纵横两个方位同时表达信息,可存储的信息量是一维码的几十倍,并能整合图像、声音、文字等信息,而一维码只能表达文字二维码还具有防伪效果好、抗磨损性能强等优势。手机二维码是将相关信息编成二维码,...
  • 之前公司要求写个云标签的模块(标签包含文字,一维码,二维码和图片),大致过程是将标签转为zpl命令传给打印客户端,客户端再传给标签打印机的,针对zpl命令生成,我想了三种思路,每种思路各有利弊。其中前端我...
  • 这样的例子虽然已经很多了,不过我在网上浏览了一圈,也没找到几个图库二维码图片识别例子,好的算法识别率才高。这里有一个好点的算法,算法不是我写的,只是作为整理记录,给众多安卓开发者一个方便。
  • 最近一个微信小应用,最后...如上所示:就是在原始海报上叠加上当前登录用户的相关信息等,输出成图片进行展示: 直接上代码:分享图片操作工具类 SharedImageUtils package com.javen.utils; import java...
  • Android把文字写到图片上生成图片+文字的新图片

    万次阅读 热门讨论 2017-04-21 10:05:41
    我们项目最近需要微信分享员工二维码功能,二维码图片直接使用zxing就可以生成,但是生成之后只有一个图片,而我们需求的要求是这样的:    没错就是二维码下边有一行提示文字,你可能会想直接imageview下边...
  • 第二步:把“编码:1234567” 转换成二维码图片 调用 ThoughtWorks.QRCode.dll 可以添加 picturebox 把二维码显示出来 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); this.pictureBox1.Image = ...
  • 通常,我们开发一个app,有Android版本,有ios版本,但是,我们有时候只有一个二维码可以放置,比如,通过社会化分享,分享到微信一张图片,通过微信识别二维码来下载我们的app,此时,只有一个二维码, 那么怎样,让...
  • /** * 图片转点阵(黑白) * @param string $imgPath * @return array */ function imgToLattice(string $imgPath): array { $size = getimagesize($imgPath);...// 創建一張片 // 储存二进制.
  • 前期准备 引入phpqrcode类库(下载地址:...支持彩色二维码的下载地址:https://download.csdn.net/download/weixin_37557729/11891244) PHP开启GD扩展库支持 1、利用phpqrcode生成二维...
  • 1.Java excel 生成多个二维码(java springboot框架) (1) 第一步: pom.xml 配置文件配置参数如下: <!-- 二维码 --> <dependency> <groupId>com.google.zxing</groupId> &...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,373
精华内容 2,549
关键字:

二维码图片和文字怎么做成图