看过别人制作缩略图的方法。
http://caiceclb.iteye.com/blog/627219
http://hi.baidu.com/pep525/blog/item/7d068e3b9aa900ef15cecba4.html
有点不太满意:
无法识别原始图像的格式,要么全转为jpg,要么显式写死转换格式。
参考
http://www.exampledepot.com/egs/javax.imageio/DiscType.html
稍微改版了一下。图片转换为原始图像的格式。
省却网站编辑的时候图片上传之前需要缩小适合页面,节省时间。
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
public class ImageUtils {
/**
* 按原始比例缩小图片至targetLength大小,并写入源文件(覆盖)。如果图片目标实际小于targetLength,则保持图像不变。
* isWidth参数表示targetLength 指的是宽度还是高度,true为宽度。
* 此方法在WEB应用中,可以方便裁剪提交上来的过大的图像,而不失真。
* @param imgsrc
* @param targetLength
* @param isWidth
*/
public static void reduceImg(String imgsrc, int targetLength,boolean isWidth) {
try {
File srcfile = new File(imgsrc);
if (!srcfile.exists()) {
return;
}
Image src = ImageIO.read(srcfile);
//原始图像高和宽
int width = src.getWidth(null);
int height = src.getHeight(null);
int widthdist = 0;
int heightdist = 0;
//确定图像的缩放后的高和宽
if(isWidth){
if(targetLength >= width) return;
double scale = targetLength * 1.0/ width;
widthdist = targetLength;
heightdist = (int) (height*scale);
}else{
if(targetLength >= height) return;
double scale = targetLength * 1.0/ height;
widthdist = (int) (width*scale);
heightdist = targetLength;
}
BufferedImage tag= new BufferedImage((int) widthdist, (int) heightdist,
BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist, Image.SCALE_FAST), 0, 0, null); //根据缩略图要求品质可以选择 Image.SCALE_SMOOTH
String formatName = getFormatName(srcfile);//此句必须在new FileOutputStream之前,因为是替换原图,FileOutputStream对象未关闭之前,ImageInputStream无法获得文件格式。
FileOutputStream out = new FileOutputStream(srcfile);
ImageIO.write(tag, formatName, out);
out.flush();
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
private static String getFormatName(File o) {
try {
// Create an image input stream on the image
ImageInputStream iis = ImageIO.createImageInputStream(o);
// Find all image readers that recognize the image format
Iterator iter = ImageIO.getImageReaders(iis);
if (!iter.hasNext()) {
// No readers found
return null;
}
// Use the first reader
ImageReader reader = (ImageReader)iter.next();
// Close stream
iis.close();
// Return the format name
return reader.getFormatName();
} catch (IOException e) {
}
// The image could not be read
return null;
}
public static void main(String[] args){
reduceImg("d:/test.jpg", 600,true);
}
}
分享到:
相关推荐
比例缩放是指保持图片的长宽比,即纵横比不变,只改变其尺寸大小。如果不按比例缩放,图片可能会被拉伸或压缩,导致失真。在处理图像时,保持原图的比例是非常重要的,因为它可以确保图片内容的清晰度和视觉效果。 ...
等比例缩放的核心在于保持原图的宽高比不变。当指定新的宽度或高度时,需要根据原图的比例来计算另一个维度的新值。例如,如果原图的尺寸为800x600像素,并希望将其宽度调整为400像素,则应按照相同的比例计算新的...
等比例放缩图片是指保持图片的宽高比不变,调整图片的尺寸。这样做可以防止图片变形,保持原有的形状和结构。等比例放缩通常通过以下步骤完成: 1. 计算缩放比例:假设我们要将一个宽度为W,高度为H的图片,缩放到...
1. **保持原比例**:此参数是一个布尔值,如果设置为`true`,则图片将按照原比例缩放,保持纵横比不变。如果设置为`false`,则可能会改变图片的比例,这可能导致图片变形。 2. **新宽度**:这是一个可选参数,用于...
图片等比缩放是指按照比例缩小或放大图片,保持其长宽比不变,防止图像拉伸或压缩导致失真。这是图像处理中保持图片原有形状的重要原则,尤其在处理包含几何形状或者人物肖像的图像时更为关键。 XnView是一款功能...
为了避免这个问题,高级的图片缩放算法会采用等比例缩放,即保持纵横比不变,使图片在放大或缩小后仍保持原有的形状。 在"phpThumb"这个压缩包中,包含的可能是一个用PHP编写的图片处理库。PHP是一种广泛使用的...
图片缩小器的核心功能在于其等比例缩放算法,这种算法遵循了图像处理的基本原则,即保持原始图片的宽高比不变,避免因缩放导致图片变形。在图像处理中,保持比例是非常重要的,因为不等比例缩放可能会让图像失真,...
用户通常需要设置新的图像尺寸,例如宽度和高度的像素值,或者选择按比例缩放,以保持原始图像的比例。此外,工具可能还会提供预览功能,让用户在应用更改前确认效果。 在调整图片大小的过程中,我们需要关注几个...
等比例压缩是图片处理中的一个重要概念,它指的是在调整图片尺寸时,保持图片的宽高比不变,避免因为非等比例缩放导致的图像变形。例如,如果一张图片原始尺寸为800x600像素,等比例压缩到50%的话,新尺寸将变为400...
同时,根据实际情况调整缩放比例,例如"800x>"会将图片的宽度限制在800像素,保持宽高比不变。 除了`-resize`选项,ImageMagick还提供了其他许多参数,如`-quality`用于设置JPEG的质量,`-format`用于指定输出格式...
这个工具的主要功能是允许用户一次性对大量图片进行尺寸调整,同时保持图片的质量不变,避免了因缩放导致的失真问题。 批量修改照片是指在无需逐个打开每张图片的情况下,通过自动化的方式对一组图片进行同一操作,...
3. **保持比例**:在调整尺寸时,保持原图的比例是非常重要的,否则图片可能会失真。大多数转换工具都提供了这个选项,以确保宽高比不变。 4. **质量设置**:对于JPEG格式的图片,转换过程中通常涉及质量设置。质量...
在实际应用中,还需要考虑如何平滑地调整缩放比例,以及如何在放大时保持焦点位置不变。 此外,图片查看插件的开发可能涉及图像格式的处理。常见的图片格式如JPEG、PNG、BMP等,它们的解码和编码方式各异。开发者...
- 保持图片原始比例调整尺寸可以防止失真,非比例缩放可能导致图像拉伸或压缩。 - 针对特定用途(如社交媒体头像、网页横幅等)时,需要遵循预设的尺寸规格。 7. 图片元数据: - 图片可能包含元数据,如拍摄日期...
2. 计算缩放比例,确保长宽按比例缩小,避免拉伸。 3. 创建一个新图像,尺寸为缩放后的大小。 4. 使用`Graphics2D`对象在新图像上绘制原始图像,设置缩放因子。 5. 保存处理后的图像。 接下来,我们讨论图片压缩。...
// 缩放图片 BufferedImage resized = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = resized.createGraphics(); g2d.drawImage(original, 0, 0, newWidth, ...
标题中的“图片容量大变小不失真软件”指的是能够压缩图片文件大小,同时保持图片质量不变的工具。这种软件在处理大量图片或者需要上传至空间有限的网站时尤其有用。通常,图片的大小取决于其分辨率、颜色深度以及...
5. **绘制结果**:使用`canvas`的`drawImage`方法,按照计算出的缩放因子在画布上绘制图片,确保正确拉伸和保持区域不失真。 6. **导出新图片**:如果需要,可以将处理后的结果导出为新的图片文件,如`.png`。 在...
如果超过600像素,则按比例缩小,否则不进行压缩操作。 - 函数内部使用“switch”语句来处理不同的图片格式(JPEG、GIF、PNG),并通过“header”函数设置输出MIME类型,并进行图片压缩保存。重要的是,对于GIF格式...