为了减轻后台服务器的压力,前台页面做了静态化,但是商品的价格是经常变化的,为此价格需要实时加载,将商品的价格生成图片,后台服务器添加和修改商品时生成。
后来查看了下京东,价格也是用图片做的。
以下是代码
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,要不然不如不写。"); } } }