当前位置: 代码迷 >> Web前端 >> 生成价钱图片的工具类
  详细解决方案

生成价钱图片的工具类

热度:110   发布时间:2012-09-10 11:02:32.0
生成价格图片的工具类
为了减轻后台服务器的压力,前台页面做了静态化,但是商品的价格是经常变化的,为此价格需要实时加载,将商品的价格生成图片,后台服务器添加和修改商品时生成。
后来查看了下京东,价格也是用图片做的。
以下是代码

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

/**
 * Oct 22, 2011
 */
public class ImgUtil {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String fileContent="¥ 1710.33";
		String fileName="123_1.jpg";
		String filePath="D:/"+fileName;
		generateImg(fileContent,filePath,false);
		
	}
	
	public static void generateImg(String content,String filePath,boolean isSpecial){
		try {
			BufferedImage im=CreateImage(content,isSpecial);
			File output=new File(filePath);
			ImageIO.write(im, "JPEG", output);
			} catch (Exception e) {
				System.out.println("生成文件失败。");
				e.printStackTrace();
				return;
			}
	}
	
	/**
	 * 
	 * @param sCode
	 * @param isSpecial 是否市场价,市场价需要添加删除线
	 * @return
	 */
	public static BufferedImage CreateImage(String sCode,boolean isSpecial)
    {
        try{
                //字符的字体
    			Font CodeFont =new Font("宋体",Font.BOLD,13);
    			if(isSpecial){
    				CodeFont =new Font("宋体",Font.PLAIN,14);
    			}
    			
    			
                int iLength = sCode.length();					//得到图片需要输出文字的长度
                int width=10*iLength, height=28;				//图象宽度与高度
                int CharWidth = (int)(width-18)/iLength;		//字符距左边宽度
                int CharHeight = 20;    						//字符距上边高度

                // 在内存中创建图象
                BufferedImage image = new BufferedImage(8*iLength,height,BufferedImage.TYPE_INT_RGB);

                // 获取图形上下文
                Graphics g = image.getGraphics();

                // 设定背景色
                //g.setColor(getRandColor(200,240));
                g.fillRect(0, 0, width, height);

                //设定字体
                g.setFont(CodeFont);
                
                if(isSpecial){//是否是市场价,市场价,添加删除线
                	g.setColor(Color.gray);
                	int x = 0;
                    int y = height/2;
                    int xl = width;
                    int yl = height/2;
                    g.drawLine(x,y,xl,yl);
                }

                for (int i=0;i<iLength;i++)
                {
                        String rand = sCode.substring(i,i+1);
                        // 将内容显示到图象中
                        if(isSpecial){
                        	g.setColor(new Color(119,119,119));
            			}else{
            				g.setColor(new Color(255,0,0));
            			}
                        g.drawString(rand,CharWidth*i+1,CharHeight);
                }
                // 图象生效
                g.dispose();
                return image;
        }
        catch(Exception e)
        {
                e.printStackTrace();
        }
        return null;
    }

}



下面是一个打叉的程序,和以上程序差不多
package info.frady;

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;

public class ImgGen {
	public static void main(String[] args) {
		File fileDir=new File("D:/java/tomcat6/webapps/HQ/upload/autograph/");
		try{
			File files[]=fileDir.listFiles();
			for(File file:files){
		        Image src = ImageIO.read(file);  
		        int width = src.getWidth(null);  
		        int height = src.getHeight(null);
		        
		        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);  
		        Graphics2D g = image.createGraphics();  
		        g.drawImage(src, 0, 0, width, height, null);
		        g.setColor(Color.red);
	            g.drawLine(0,0,width,height);
	            g.drawLine(0,height,width,0);
	            g.dispose();
	            ImageIO.write(image, "JPEG", file);
			}
		}catch(Exception e){
			System.out.println("此处只是个示例,你需要重新此error,要不然不如不写。");
		}
	}
}

  相关解决方案