JAVA生成缩略图

来源: http://wing929.javaeye.com/blog/185508

方法1:[第一种方法比后一种生成的缩略图要清晰]

Java代码
  1. importjavax.imageio.ImageIO;
  2. importjava.awt.image.BufferedImage;
  3. importjava.awt.image.ColorModel;
  4. importjava.awt.image.WritableRaster;
  5. importjava.awt.*;
  6. importjava.awt.geom.AffineTransform;
  7. importjava.io.InputStream;
  8. importjava.io.File;
  9. importjava.io.FileOutputStream;
  10. publicclassTest{
  11. publicstaticBufferedImageresize(BufferedImagesource,inttargetW,inttargetH){
  12. //targetW,targetH分别表示目标长和宽
  13. inttype=source.getType();
  14. BufferedImagetarget=null;
  15. doublesx=(double)targetW/source.getWidth();
  16. doublesy=(double)targetH/source.getHeight();
  17. //这里想实现在targetW,targetH范围内实现等比缩放。如果不需要等比缩放
  18. //则将下面的ifelse语句注释即可
  19. if(sx>sy)
  20. {
  21. sx=sy;
  22. targetW=(int)(sx*source.getWidth());
  23. }else{
  24. sy=sx;
  25. targetH=(int)(sy*source.getHeight());
  26. }
  27. if(type==BufferedImage.TYPE_CUSTOM){//handmade
  28. ColorModelcm=source.getColorModel();
  29. WritableRasterraster=cm.createCompatibleWritableRaster(targetW,targetH);
  30. booleanalphaPremultiplied=cm.isAlphaPremultiplied();
  31. target=newBufferedImage(cm,raster,alphaPremultiplied,null);
  32. }else
  33. target=newBufferedImage(targetW,targetH,type);
  34. Graphics2Dg=target.createGraphics();
  35. //smootherthanexlax:
  36. g.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
  37. g.drawRenderedImage(source,AffineTransform.getScaleInstance(sx,sy));
  38. g.dispose();
  39. returntarget;
  40. }
  41. publicstaticvoidsaveImageAsJpg(StringfromFileStr,StringsaveToFileStr,intwidth,inthight)
  42. throwsException{
  43. BufferedImagesrcImage;
  44. //Stringex=fromFileStr.substring(fromFileStr.indexOf("."),fromFileStr.length());
  45. StringimgType="JPEG";
  46. if(fromFileStr.toLowerCase().endsWith(".png")){
  47. imgType="PNG";
  48. }
  49. //System.out.println(ex);
  50. FilesaveFile=newFile(saveToFileStr);
  51. FilefromFile=newFile(fromFileStr);
  52. srcImage=ImageIO.read(fromFile);
  53. if(width>0||hight>0)
  54. {
  55. srcImage=resize(srcImage,width,hight);
  56. }
  57. ImageIO.write(srcImage,imgType,saveFile);
  58. }
  59. publicstaticvoidmain(Stringargv[]){
  60. try{
  61. //参数1(from),参数2(to),参数3(宽),参数4(高)
  62. Test.saveImageAsJpg("E:/Document/MyPictures/3.gif","c:/6.gif",50,50);
  63. }catch(Exceptione)
  64. {
  65. e.printStackTrace();
  66. }
  67. }
  68. }


方法2:

Java代码
  1. importjava.io.*;
  2. importjava.util.*;
  3. importcom.sun.image.codec.jpeg.*;
  4. importjava.awt.image.*;
  5. importjava.awt.*;
  6. importjava.net.*;
  7. importjava.applet.*;
  8. importjava.sql.*;
  9. //缩略图类,
  10. //本java类能将jpg图片文件,进行等比或非等比的大小转换。
  11. //具体使用方法
  12. //s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度,是否等比缩放(默认为true))
  13. publicclassTes{
  14. StringInputDir;//输入图路径
  15. StringOutputDir;//输出图路径
  16. StringInputFileName;//输入图文件名
  17. StringOutputFileName;//输出图文件名
  18. intOutputWidth=80;//默认输出图片宽
  19. intOutputHeight=80;//默认输出图片高
  20. intrate=0;
  21. booleanproportion=true;//是否等比缩放标记(默认为等比缩放)
  22. publicTes(){
  23. //初始化变量
  24. InputDir="";
  25. OutputDir="";
  26. InputFileName="";
  27. OutputFileName="";
  28. OutputWidth=80;
  29. OutputHeight=80;
  30. rate=0;
  31. }
  32. publicvoidsetInputDir(StringInputDir){
  33. this.InputDir=InputDir;
  34. }
  35. publicvoidsetOutputDir(StringOutputDir){
  36. this.OutputDir=OutputDir;
  37. }
  38. publicvoidsetInputFileName(StringInputFileName){
  39. this.InputFileName=InputFileName;
  40. }
  41. publicvoidsetOutputFileName(StringOutputFileName){
  42. this.OutputFileName=OutputFileName;
  43. }
  44. publicvoidsetOutputWidth(intOutputWidth){
  45. this.OutputWidth=OutputWidth;
  46. }
  47. publicvoidsetOutputHeight(intOutputHeight){
  48. this.OutputHeight=OutputHeight;
  49. }
  50. publicvoidsetW_H(intwidth,intheight){
  51. this.OutputWidth=width;
  52. this.OutputHeight=height;
  53. }
  54. publicStrings_pic(){
  55. BufferedImageimage;
  56. StringNewFileName;
  57. //建立输出文件对象
  58. Filefile=newFile(OutputDir+OutputFileName);
  59. FileOutputStreamtempout=null;
  60. try{
  61. tempout=newFileOutputStream(file);
  62. }catch(Exceptionex){
  63. System.out.println(ex.toString());
  64. }
  65. Imageimg=null;
  66. Toolkittk=Toolkit.getDefaultToolkit();
  67. Appletapp=newApplet();
  68. MediaTrackermt=newMediaTracker(app);
  69. try{
  70. img=tk.getImage(InputDir+InputFileName);
  71. mt.addImage(img,0);
  72. mt.waitForID(0);
  73. }catch(Exceptione){
  74. e.printStackTrace();
  75. }
  76. if(img.getWidth(null)==-1){
  77. System.out.println("can'tread,retry!"+"<BR>");
  78. return"no";
  79. }else{
  80. intnew_w;
  81. intnew_h;
  82. if(this.proportion==true){//判断是否是等比缩放.
  83. //为等比缩放计算输出的图片宽度及高度
  84. doublerate1=((double)img.getWidth(null))/
  85. (double)OutputWidth+0.1;
  86. doublerate2=((double)img.getHeight(null))/
  87. (double)OutputHeight+0.1;
  88. doublerate=rate1>rate2?rate1:rate2;
  89. new_w=(int)(((double)img.getWidth(null))/rate);
  90. new_h=(int)(((double)img.getHeight(null))/rate);
  91. }else{
  92. new_w=OutputWidth;//输出的图片宽度
  93. new_h=OutputHeight;//输出的图片高度
  94. }
  95. BufferedImagebuffImg=newBufferedImage(new_w,new_h,
  96. BufferedImage.TYPE_INT_RGB);
  97. Graphicsg=buffImg.createGraphics();
  98. g.setColor(Color.white);
  99. g.fillRect(0,0,new_w,new_h);
  100. g.drawImage(img,0,0,new_w,new_h,null);
  101. g.dispose();
  102. JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(tempout);
  103. try{
  104. encoder.encode(buffImg);
  105. tempout.close();
  106. }catch(IOExceptionex){
  107. System.out.println(ex.toString());
  108. }
  109. }
  110. return"ok";
  111. }
  112. publicStrings_pic(StringInputDir,StringOutputDir,StringInputFileName,
  113. StringOutputFileName){
  114. //输入图路径
  115. this.InputDir=InputDir;
  116. //输出图路径
  117. this.OutputDir=OutputDir;
  118. //输入图文件名
  119. this.InputFileName=InputFileName;
  120. //输出图文件名
  121. this.OutputFileName=OutputFileName;
  122. returns_pic();
  123. }
  124. publicStrings_pic(StringInputDir,StringOutputDir,StringInputFileName,
  125. StringOutputFileName,intwidth,intheight,
  126. booleangp){
  127. //输入图路径
  128. this.InputDir=InputDir;
  129. //输出图路径
  130. this.OutputDir=OutputDir;
  131. //输入图文件名
  132. this.InputFileName=InputFileName;
  133. //输出图文件名
  134. this.OutputFileName=OutputFileName;
  135. //设置图片长宽
  136. setW_H(width,height);
  137. //是否是等比缩放标记
  138. this.proportion=gp;
  139. returns_pic();
  140. }
  141. publicstaticvoidmain(String[]a){
  142. //s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度)
  143. Tesmypic=newTes();
  144. System.out.println(
  145. mypic.s_pic("E:\Document\MyPictures\",
  146. "E:\Document\MyPictures\",
  147. "topbg-3.gif","3.gif",400,400,true)
  148. );
  149. }
  150. }

你可能感兴趣的:(java,sql,Blog,sun)