java如何实现缩略图,Java实现缩略图的步骤

Java实现缩略图的方法

赵永恩

import javax.imageio.ImageIO;

import java.awt.image.BufferedImage;

import java.awt.image.ColorModel;

import java.awt.image.WritableRaster;

import java.awt.*;

import java.awt.geom.AffineTransform;

import java.io.InputStream;

import java.io.File;

import java.io.FileOutputStream;

public class Test {

public static BufferedImage resize(BufferedImage source, int targetW, int targetH) {

// targetW,targetH分别表示目标长和宽

int type = source.getType();

BufferedImage target = null;

double sx = (double) targetW / source.getWidth();

double sy = (double) targetH / source.getHeight();

//这里想实现在targetW,targetH范围内实现等比缩放。如果不需要等比缩放

//则将下面的if else语句注释即可

if(sx>sy)

{

sx = sy;

targetW = (int)(sx * source.getWidth());

}else{

sy = sx;

targetH = (int)(sy * source.getHeight());

}

if (type == BufferedImage.TYPE_CUSTOM) { //handmade

ColorModel cm = source.getColorModel();

WritableRaster raster = cm.createCompatibleWritableRaster(targetW, targetH);

boolean alphaPremultiplied = cm.isAlphaPremultiplied();

target = new BufferedImage(cm, raster, alphaPremultiplied, null);

} else

target = new BufferedImage(targetW, targetH, type);

Graphics2D g = target.createGraphics();

//smoother than exlax:

g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY );

g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));

g.dispose();

return target;

}

public static void saveImageAsJpg (String fromFileStr,String saveToFileStr,int width,int hight)

throws Exception {

BufferedImage srcImage;

// String ex = fromFileStr.substring(fromFileStr.indexOf("."),fromFileStr.length());

String imgType = "JPEG";

if (fromFileStr.toLowerCase().endsWith(".png")) {

imgType = "PNG";

}

// System.out.println(ex);

File saveFile=new File(saveToFileStr);

File fromFile=new File(fromFileStr);

srcImage = ImageIO.read(fromFile);

if(width > 0 || hight > 0)

{

srcImage = resize(srcImage, width, hight);

}

ImageIO.write(srcImage, imgType, saveFile);

}

public static void main (String argv[]) {

try{

//参数1(from),参数2(to),参数3(宽),参数4(高)

Test.saveImageAsJpg("E:/Document/My Pictures/3.gif","c:/6.gif",50,50);

} catch(Exception e)

{

e.printStackTrace();

}

}

}

import java.io.*;

import java.util.*;

import com.sun.image.codec.jpeg.*;

import java.awt.image.*;

import java.awt.*;

import java.net.*;

import java.applet.*;

import java.sql.*;

//缩略图类,

//本java类能将jpg图片文件,进行等比或非等比的大小转换。

//具体使用方法

//s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度,是否等比缩放(默认为true))

public class Tes {

String InputDir; //输入图路径

String OutputDir; //输出图路径

String InputFileName; //输入图文件名

String OutputFileName; //输出图文件名

int OutputWidth = 80; //默认输出图片宽

int OutputHeight = 80; //默认输出图片高

int rate = 0;

boolean proportion = true; //是否等比缩放标记(默认为等比缩放)

public Tes() {

//初始化变量

InputDir = "";

OutputDir = "";

InputFileName = "";

OutputFileName = "";

OutputWidth = 80;

OutputHeight = 80;

rate = 0;

}

public void setInputDir(String InputDir) {

this.InputDir = InputDir;

}

public void setOutputDir(String OutputDir) {

this.OutputDir = OutputDir;

}

public void setInputFileName(String InputFileName) {

this.InputFileName = InputFileName;

}

public void setOutputFileName(String OutputFileName) {

this.OutputFileName = OutputFileName;

}

public void setOutputWidth(int OutputWidth) {

this.OutputWidth = OutputWidth;

}

public void setOutputHeight(int OutputHeight) {

this.OutputHeight = OutputHeight;

}

public void setW_H(int width, int height) {

this.OutputWidth = width;

this.OutputHeight = height;

}

public String s_pic() {

BufferedImage image;

String NewFileName;

//建立输出文件对象

File file = new File(OutputDir + OutputFileName);

FileOutputStream tempout = null;

try {

tempout = new FileOutputStream(file);

} catch (Exception ex) {

System.out.println(ex.toString());

}

Image img = null;

Toolkit tk = Toolkit.getDefaultToolkit();

Applet app = new Applet();

MediaTracker mt = new MediaTracker(app);

try {

img = tk.getImage(InputDir + InputFileName);

mt.addImage(img, 0);

mt.waitForID(0);

} catch (Exception e) {

e.printStackTrace();

}

if (img.getWidth(null) == -1) {

System.out.println(" can't read,retry!" + "
");

return "no";

} else {

int new_w;

int new_h;

if (this.proportion == true) { //判断是否是等比缩放.

//为等比缩放计算输出的图片宽度及高度

double rate1 = ((double) img.getWidth(null)) /

(double) OutputWidth + 0.1;

double rate2 = ((double) img.getHeight(null)) /

(double) OutputHeight + 0.1;

double rate = rate1 > rate2 ? rate1 : rate2;

new_w = (int) (((double) img.getWidth(null)) / rate);

new_h = (int) (((double) img.getHeight(null)) / rate);

} else {

new_w = OutputWidth; //输出的图片宽度

new_h = OutputHeight; //输出的图片高度

}

BufferedImage buffImg = new BufferedImage(new_w, new_h,

BufferedImage.TYPE_INT_RGB);

Graphics g = buffImg.createGraphics();

g.setColor(Color.white);

g.fillRect(0, 0, new_w, new_h);

g.drawImage(img, 0, 0, new_w, new_h, null);

g.dispose();

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(tempout);

try {

encoder.encode(buffImg);

tempout.close();

} catch (IOException ex) {

System.out.println(ex.toString());

}

}

return "ok";

}

public String s_pic(String InputDir, String OutputDir, String InputFileName,

String OutputFileName) {

//输入图路径

this.InputDir = InputDir;

//输出图路径

this.OutputDir = OutputDir;

//输入图文件名

this.InputFileName = InputFileName;

//输出图文件名

this.OutputFileName = OutputFileName;

return s_pic();

}

public String s_pic(String InputDir, String OutputDir, String InputFileName,

String OutputFileName, int width, int height,

boolean gp) {

//输入图路径

this.InputDir = InputDir;

//输出图路径

this.OutputDir = OutputDir;

//输入图文件名

this.InputFileName = InputFileName;

//输出图文件名

this.OutputFileName = OutputFileName;

//设置图片长宽

setW_H(width, height);

//是否是等比缩放 标记

this.proportion = gp;

return s_pic();

}

public static void main(String[] a) {

//s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度)

Tes mypic = new Tes();

System.out.println(

mypic.s_pic("E:\Document\My Pictures\",

"E:\Document\My Pictures\",

"topbg-3.gif", "3.gif", 400, 400, true)

);

}

}

3.jsp方式

java.io.*,java.awt.Image,java.awt.image.*,com.sun.image.codec.jpeg.*,

try

{

java.io.File file = new java.io.File("E:\Document\My Pictures\3.gif");

String newurl="E:\Document\My Pictures\32.gif"; //新的缩略图保存地址

Image src = javax.imageio.ImageIO.read(file); //构造Image对象

float tagsize=200;

int old_w=src.getWidth(null); //得到源图宽

int old_h=src.getHeight(null);

int new_w=0;

int new_h=0; //得到源图长

int tempsize;

float tempdouble;

if(old_w>old_h){

tempdouble=old_w/tagsize;

}else{

tempdouble=old_h/tagsize;

}

new_w=Math.round(old_w/tempdouble);

new_h=Math.round(old_h/tempdouble);//计算新图长宽

BufferedImage tag = new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);

tag.getGraphics().drawImage(src,0,0,new_w,new_h,null); //绘制缩小后的图

FileOutputStream newimage=new FileOutputStream(newurl); //输出到文件流

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);

encoder.encode(tag); //近JPEG编码

newimage.close();

}catch (Exception e){

e.toString();

}

这是其他地方看来的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java提供的ImageIO类和放算法来实现图片的略图。具体步骤如下: 1. 读取原始图片,使用ImageIO.read()方法。 2. 创建一个BufferedImage对象,使用原始图片的宽度和高度作为参数。 3. 获取Graphics2D对象,使用BufferedImage对象的createGraphics()方法。 4. 设置Graphics2D对象的渲染质量和抗锯齿。 5. 使用Graphics2D对象的drawImage()方法将原始图片绘制到BufferedImage对象中。 6. 使用ImageIO.write()方法将BufferedImage对象保存为略图。 7. 关闭Graphics2D对象和输入输出流。 示例代码如下: ``` import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public class ImageUtils { public static void createThumbnail(String sourceImagePath, String targetImagePath, int targetWidth, int targetHeight) throws Exception { BufferedImage sourceImage = ImageIO.read(new File(sourceImagePath)); BufferedImage targetImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB); Graphics2D graphics2D = targetImage.createGraphics(); graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); graphics2D.drawImage(sourceImage, , , targetWidth, targetHeight, null); ImageIO.write(targetImage, "JPEG", new File(targetImagePath)); graphics2D.dispose(); } } ``` 调用示例: ``` ImageUtils.createThumbnail("source.jpg", "target.jpg", 100, 100); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值