这个是在参考网上一些代码基础上进行编写的,主要是首先实现图片的等比缩放,然后在进行截取,比如一张1024*768的图要截成263*150的,首先是等比缩放后变成263*197的,然后在对这个图片的高度进行截取,变成163*150的
java 代码
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.Rectangle;
- import java.awt.RenderingHints;
- import java.awt.geom.AffineTransform;
- import java.awt.image.BufferedImage;
- import java.awt.image.ColorModel;
- import java.awt.image.WritableRaster;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import javax.imageio.ImageIO;
- import com.sun.image.codec.jpeg.JPEGCodec;
- import com.sun.image.codec.jpeg.JPEGImageEncoder;
-
-
-
-
-
-
-
- public class ImageHepler {
-
-
-
-
-
-
-
- private static BufferedImage resize(BufferedImage source, int targetW,
- int targetH) {
-
- int type = source.getType();
- BufferedImage target = null;
- double sx = (double) targetW / source.getWidth();
- double sy = (double) targetH / source.getHeight();
-
-
- if (sx < sy) {
- sx = sy;
- targetW = (int) (sx * source.getWidth());
- } else {
- sy = sx;
- targetH = (int) (sy * source.getHeight());
- }
- if (type == BufferedImage.TYPE_CUSTOM) {
- 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();
-
- g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
- RenderingHints.VALUE_INTERPOLATION_BICUBIC);
- g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
- g.dispose();
- return target;
- }
-
-
-
-
-
-
-
-
-
-
-
- public static void saveImageAsJpg(String inFilePath, String outFilePath,
- int width, int hight, boolean proportion)throws Exception {
- File file = new File(inFilePath);
- InputStream in = new FileInputStream(file);
- File saveFile = new File(outFilePath);
-
- BufferedImage srcImage = ImageIO.read(in);
- if (width > 0 || hight > 0) {
-
- int sw = srcImage.getWidth();
- int sh = srcImage.getHeight();
-
- if (sw > width && sh > hight) {
- srcImage = resize(srcImage, width, hight);
- } else {
- String fileName = saveFile.getName();
- String formatName = fileName.substring(fileName
- .lastIndexOf('.') + 1);
- ImageIO.write(srcImage, formatName, saveFile);
- return;
- }
- }
-
- int w = srcImage.getWidth();
- int h = srcImage.getHeight();
-
- if (w == width) {
-
- int x = 0;
- int y = h / 2 - hight / 2;
- saveSubImage(srcImage, new Rectangle(x, y, width, hight), saveFile);
- }
-
- else if (h == hight) {
-
- int x = w / 2 - width / 2;
- int y = 0;
- saveSubImage(srcImage, new Rectangle(x, y, width, hight), saveFile);
- }
- in.close();
- }
-
-
-
-
-
-
-
- private static void saveSubImage(BufferedImage image,
- Rectangle subImageBounds, File subImageFile) throws IOException {
- if (subImageBounds.x < 0 || subImageBounds.y < 0
- || subImageBounds.width - subImageBounds.x > image.getWidth()
- || subImageBounds.height - subImageBounds.y > image.getHeight()) {
- System.out.println("Bad subimage bounds");
- return;
- }
- BufferedImage subImage = image.getSubimage(subImageBounds.x,subImageBounds.y, subImageBounds.width, subImageBounds.height);
- String fileName = subImageFile.getName();
- String formatName = fileName.substring(fileName.lastIndexOf('.') + 1);
- ImageIO.write(subImage, formatName, subImageFile);
- }
-
-
- }
分享到:
- 2007-08-02 10:28
- 浏览 4786
- 评论(9)
- 论坛回复 / 浏览 (3 / 14068)
- 查看更多
相关推荐
本文将详细介绍如何使用JQuery实现等比缩放图片的插件,并结合提供的`autoImg`文件进行解析。 首先,我们要理解等比缩放的基本原理。等比缩放是指保持图片的长宽比不变,根据指定的容器大小来调整图片的尺寸。在CSS...
2. 图片等比缩放:在XnView中,用户可以轻松地对图片进行等比缩放,只需在尺寸设置中保持宽度和高度的比例锁定即可。此外,软件还提供了预览功能,让用户在缩放前查看效果。 除了这些基本功能,XnView还有其他高级...
通过使用Java语言和javacv库,我们可以快速获取视频文件中的帧图片,并对其进行等比缩放,以满足不同的应用需求。 知识点一:视频文件中的帧图片获取 * 视频文件中的帧图片获取是指从视频文件中抽取出每一帧图片的...
2. **VW布局**:使用视窗单位`vw`,即视口宽度的百分比来定义元素尺寸,可以实现等比缩放的效果。 结合两种布局方式的优点,可以在保证布局自适应的同时,解决由于屏幕尺寸变化导致的字体过大的问题。 #### 实施...
这是个工具类,可以实现图片的等比缩放,坑根据图片百分比,或者固定尺寸等进行缩放,还可以给图片增加水印,很好用
等比缩放是指按照图片的宽高比进行缩放,保证长宽比不变,这样可以保持图片的原始形状。如果随意改变图片的宽高,可能会导致图片拉伸或压缩,失去原有的视觉效果。 实现JS图片等比缩放的核心在于计算图片的新尺寸,...
例如,如果等比缩放后的图片大于目标尺寸,我们可以按照中心点进行裁剪。对于较小的尺寸,可能需要填充空白区域,通常采用背景色或模糊处理。 5. **保存缩略图**:使用图像处理库保存缩放后的图片,可以设置质量...
这段代码设置图片的最大宽度为容器宽度的100%,高度会自动根据宽度的比例进行调整,从而实现等比缩放。当容器大小改变时,图片也会相应地等比缩放。 在实现翻页滚动时,可以使用CSS的`overflow`属性。例如,如果...
在Qt框架中,等比缩放是常见的图形用户界面(GUI)操作,尤其在处理图像或者自定义控件时显得尤为重要。等比缩放保证了对象的比例不会因为缩放而失真,保持原有的形状不变。以下是对“Qt点击等比缩放源码”相关知识...
本例使用php+h5+canvas+jcrop 实现网页上传图片并对原图等比缩放后进行裁剪。实现过程:在HTML中对图片进行上传,在图片文件还未上传至服务器仍停留在form表单时,对该文件进行处理,在此过程中先获取原图的64位base...
但是没有边框,窗体就不能移动,并且不能修改大小,经过修改,窗体可以移动,并且能移动大小,但是发现窗体拉到以后分辨率会降低,经过努力,终于把无边框窗体改成可以拖动,改变大小并且可以等比缩放窗体,...
有时候,我们希望图片能够在不同的设备和屏幕尺寸下保持良好的显示比例,这就需要用到等比缩放技术。本文将深入探讨如何使用JavaScript实现图片的等比缩放,确保在火狐、IE、谷歌等主流浏览器中都能正常工作。 首先...
图片自动等比缩放JS(实用) 直接加载调用,不受IE、TT、火狐影响
本教程将专注于使用Java语言实现图片的等比缩放和压缩技术,以满足存储和传输的需求。下面,我们将深入探讨这些关键知识点。 首先,我们来了解等比缩放。等比缩放是指在改变图片尺寸时,保持其长宽比不变,防止图片...
等比缩放是图像处理中的一个概念,指的是按照图片的原始比例(即宽高比)来调整其尺寸。这样可以确保图片不失真,不会出现拉伸或压缩的情况。在Android中,我们通常使用`Bitmap`类来处理图片,并通过`BitmapFactory`...
在Java编程语言中,处理图片是一项常见的任务,包括调整图片大小、等比例缩放、裁剪、压缩以及添加水印等。以下将详细介绍这些知识点: 1. **等比例缩放图片**: 在Java中,我们可以使用`java.awt.image....
2. **编程实现**:在编程中,可以通过设置缩放因子来实现等比缩放。例如,在Python的PIL库中,可以先计算出缩放比例,然后使用`resize()`函数,确保宽度和高度的缩放比例相等。 3. **分辨率与质量**:缩放过程中要...
VC++ 实现窗体控件及元素随窗口缩放的代码 VC++实现窗体控件及元素随窗口缩放的代码,在本例中,窗体中有ComBox、Calendar控件、TxtBox,这些大家在编程时候应该不陌生吧?对于本实例,它所要表达的不是这些控件如何...
- **尺寸调整**:使用 `Bitmap` 类的构造函数,将原图按照新的尺寸进行缩放。 - **资源释放**:使用完 `Bitmap` 对象后,应该调用 `Dispose()` 方法来释放内存资源。 ##### 2. 示例代码解析 ```csharp public void...
图片显示等比缩放