`
linyu19872008
  • 浏览: 281244 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA切图 等比例缩放

 
阅读更多
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.MemoryCacheImageInputStream;

/**
 * 图片工具类
 * 
 * @author Administrator
 * 
 */
public final class ImageUtils {

	public static final String PNG = "png";
	public static final String JPG = "jpg";
	public static final String BMP = "bmp";
	public static final String GIF = "gif";

	public static void main(String[] args) {
		zoom("D:\\1.jpg", "D:\\2.jpg", 365, "jpg");
	}

	/**
	 * 缩放图片
	 * 
	 * @param picFrom
	 *            源图片地址
	 * @param picTo
	 *            目标图片地址
	 * @param size
	 *            目标图片宽度
	 * @param formart
	 *            目标图片格式
	 * @return
	 */
	public static String zoom(String picFrom, String picTo, int size,
			String formart) {
		formart = JPG;
		try {
			byte[] k1 = readFromFile(picFrom);
			BufferedImage img = getScaleImage(k1, formart.toUpperCase(), size);
			RenderedImage rendImage = getScaleImage(k1, formart.toUpperCase(),
					size);
			// 以下是将图形保存为标准图片格式
			ImageIO.write(rendImage, formart.toUpperCase(), new File(picTo));
		} catch (IOException e) {

		}
		return picTo;
	}

	public static byte[] readFromFile(String path) throws IOException {
		InputStream is = new FileInputStream(new File(path));
		byte[] buf = new byte[is.available()];
		is.read(buf);
		is.close();
		return buf;
	}

	/**
	 * 构建一个image对象
	 * 
	 * @param img
	 * @return
	 * @throws IOException
	 */
	public static ImageInfo getImageInfo(byte[] img) throws IOException {
		ByteArrayInputStream bais = new ByteArrayInputStream(img);
		MemoryCacheImageInputStream is = new MemoryCacheImageInputStream(bais);
		Iterator<ImageReader> it = ImageIO.getImageReaders(is);
		ImageReader r = null;
		while (it.hasNext()) {
			r = it.next();
			break;
		}
		if (r == null) {
			return null;
		}
		ImageInfo i = new ImageInfo();
		i.setType(r.getFormatName().toLowerCase());
		int index = r.getMinIndex();
		/**
		 * 对于ImageReader的线程安全是不确定的
		 */
		synchronized (r) {
			r.setInput(is);
			i.setHeight(r.getHeight(index));
			i.setWidth(r.getWidth(index));
		}
		return i;
	}

	public static BufferedImage getImage(byte[] img) throws IOException {
		ByteArrayInputStream bais = new ByteArrayInputStream(img);
		BufferedImage src = ImageIO.read(bais);
		return src;
	}

	/**
	 * 等比例缩放
	 * 
	 * @param img
	 * @param width
	 * @return
	 * @throws IOException
	 */
	public static BufferedImage getScaleImage(byte[] img, String type, int width)
			throws IOException {
		ByteArrayInputStream bais = new ByteArrayInputStream(img);
		BufferedImage src = ImageIO.read(bais);
		int w = src.getWidth();
		int h = src.getHeight();
		int height = (int) (((float) width / w) * h);
		Image im = src.getScaledInstance(width, height, Image.SCALE_SMOOTH);
		BufferedImage bi = new BufferedImage(width, height, src.getType());
		bi.getGraphics().drawImage(im, 0, 0, null);
		return bi;
	}

	public static byte[] getScaleImageBytes(byte[] img, String type, int width)
			throws IOException {
		BufferedImage bi = getScaleImage(img, type, width);
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		ImageIO.write(bi, type, out);
		return out.toByteArray();
	}

	/**
	 * 获取文件类型,没找到返回null,这方法太高效了,可能不准确, 这个是我看的网上的,有bug不准确
	 * 
	 * @param byte1
	 * @return
	 */
	public static String fastParseFileType(byte[] byte1) {
		if ((byte1[0] == 71) && (byte1[1] == 73) && (byte1[2] == 70)
				&& (byte1[3] == 56) && ((byte1[4] == 55) || (byte1[4] == 57))
				&& (byte1[5] == 97)) {
			return GIF;
		}
		if ((byte1[6] == 74) && (byte1[7] == 70) && (byte1[8] == 73)
				&& (byte1[9] == 70)) {
			return JPG;
		}
		if ((byte1[0] == 66) && (byte1[1] == 77)) {
			return BMP;
		}
		if ((byte1[1] == 80) && (byte1[2] == 78) && (byte1[3] == 71)) {
			return PNG;
		}
		return null;
	}

	public static class ImageInfo {
		private String type;
		private int width;
		private int height;

		public String getType() {
			return type;
		}

		public void setType(String type) {
			this.type = type;
		}

		public int getWidth() {
			return width;
		}

		public void setWidth(int width) {
			this.width = width;
		}

		public int getHeight() {
			return height;
		}

		public void setHeight(int height) {
			this.height = height;
		}
	}
}

 

分享到:
评论

相关推荐

    Java写切图,LOGO添加源码

    这个库包含了一系列处理图像的方法,如裁剪、旋转、缩放等。另外,Java 2D API也是一个强大的工具,它可以用来绘制、操作和输出高质量的二维图形和图像。开发者可以利用这些API来读取图片文件,然后根据需要切割出...

    java 图片处理 切图代码

    java 图片处理 切图代码 实现自动缩放图片

    im4java切图

    im4java切图

    java处理裁剪图片(更改图片大小)

    ImageMagick是一款强大的命令行工具,能够处理各种图像格式,包括但不限于裁剪、缩放、旋转等操作。在Java中,我们可以借助于一个名为`Im4Java`的库来调用ImageMagick的命令。例如,要改变图片尺寸,可以创建一个`...

    java 切割图片 可预览,完整效果

    在实际项目中,还需要考虑异常处理、文件安全、多线程等因素,以确保应用的稳定性和安全性。此外,为了提供更好的用户体验,还可以考虑使用前端框架如React或Vue.js,结合canvas元素实现更流畅的图片预览和剪切操作...

    切图方法,仅工具方法

    这是一个切图工具类(内含一个方法),前端可配合使用jQuery、Jcrop,jQuery就不用说了,Jcrop相关资料可参考官网,其他业务请根据实际需求进行编写。

    天地图切图比例.txt

    根据提供的文件信息,本文将详细解释“天地图切图比例”的相关知识点,包括切图比例、分辨率、比例尺以及相关的技术细节。 ### 天地图切图比例尺介绍 天地图是中国国家测绘地理信息局推出的一个在线地理信息服务...

    栅格地图切图工具及栅格图片转换工具使用说明文档.pdf )

    - 比例尺:根据需要切分的地图级别来确定,比如实验数据的比例尺为1:24576000,对应的切图级别为5级。 投影变换后的EMP工程应该符合以上所有条件。 **附录:切图比例尺表** | 切图级别 | 工程级别 | 地图比例尺...

    ajax图片上传 包含切图等效果 php版

    总结起来,"ajax图片上传 包含切图等效果 php版"项目涵盖了前端交互、Ajax通信、服务器端处理和图片处理等多个技术点,对于提升网站用户体验和功能完善具有重要意义。在实际开发中,开发者需要结合具体业务需求,...

    arcgisserver切图原理

    每个级别代表地图的一个缩放级别,通常与比例尺相关联。级别越多,地图细节越丰富,但所需存储空间也越大。 3. **创建切图金字塔**:ArcGIS Server会按照预设的比例尺级别,自底向上生成一系列瓦片,形成一个金字塔...

    切图工具切图工具

    切图工具切图工具切图工具

    在Java中进行图片剪裁

    特别是`java.awt.image`包,其中包含了一系列与图像处理相关的类,如`BufferedImage`、`ImageIO`和`Graphics2D`等。 1. **BufferedImage**:这是Java中用于存储图像数据的对象,它提供了读取、写入和操作图像的功能...

    2d游戏切图工具

    最后,根据压缩包内的"MapEditor"文件名,我们可以推测这是一个地图编辑器功能,它可能包含地图的创建、编辑和切图等操作。通过这个工具,开发者可以直接在界面上放置怪物点、障碍点和移动点等元素,然后自动生成...

    google地图的切图规范以及技术原理

    总之,Google地图的切图规范和技术原理涉及到的领域包括地理信息系统(GIS)、地图投影、网络地图服务、图像处理和数据存储管理等。这些技术的综合运用,使得Google地图能够高效地为全球用户提供快速、准确的地理...

    切图工具及切图效果(真的很不错哦)

    通常,设计师会使用Adobe Photoshop、Sketch或Figma等软件创建设计稿,然后开发者需要将设计稿中的图片、按钮、背景等元素进行切割,生成适合网页使用的图像格式,如PNG、JPEG或SVG。切图时,我们要注意保持元素的...

    vb写的ArcEngine切图程序

    MXD是ArcGIS中的一种文件格式,它保存了地图布局的所有元素,包括数据源、图层、比例尺、标注等信息。通过编程方式处理MXD,可以自动化地对地图进行编辑、分析和输出。 切图,即把地图分割成一系列小图片,通常用于...

    ArcGIS Server的切图原理深入

    切图原理首先涉及到“Tiling Scheme”,这是一个定义了地图缓存如何创建的参数集合,包括比例尺级别、图片格式和尺寸等。Tiling Scheme Origin 是这个网格体系的左上角,通常与mxd文档使用的坐标系原点一致。地图的...

    PGIS切图工艺流程样本.doc

    "PGIS切图工艺流程样本" ...为了生成高质量的PGIS切图,我们需要遵循PGIS特定级别起始点、图像缩放比例尺、PGIS所支持经纬度范畴等原则,并且需要注意调图注意事项、切图辨别率、图片范畴、DPI设立等问题。

    切图+更新包

    在IT行业中,"切图"一词通常...综上所述,"切图+更新包"涵盖了设计、前端开发、版本控制、测试等多个环节,是产品迭代过程中的重要组成部分。处理这样的更新包需要全面考虑用户体验、性能优化以及团队协作的各个方面。

    层级瓦片切图工具(TileCutter)

    - 瓦片切图基于网格系统,将地图按照一定的分辨率和层级进行切割,每一层级代表地图的不同缩放级别。例如,最基础的层级可能包含整个地球,而更高层级则聚焦于特定区域。 - 每个瓦片通常是一个固定大小的图片(如...

Global site tag (gtag.js) - Google Analytics