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 2D API也是一个强大的工具,它可以用来绘制、操作和输出高质量的二维图形和图像。开发者可以利用这些API来读取图片文件,然后根据需要切割出...
java 图片处理 切图代码 实现自动缩放图片
im4java切图
ImageMagick是一款强大的命令行工具,能够处理各种图像格式,包括但不限于裁剪、缩放、旋转等操作。在Java中,我们可以借助于一个名为`Im4Java`的库来调用ImageMagick的命令。例如,要改变图片尺寸,可以创建一个`...
在实际项目中,还需要考虑异常处理、文件安全、多线程等因素,以确保应用的稳定性和安全性。此外,为了提供更好的用户体验,还可以考虑使用前端框架如React或Vue.js,结合canvas元素实现更流畅的图片预览和剪切操作...
总之,Google地图的切图规范和技术原理涉及到的领域包括地理信息系统(GIS)、地图投影、网络地图服务、图像处理和数据存储管理等。这些技术的综合运用,使得Google地图能够高效地为全球用户提供快速、准确的地理...
这是一个切图工具类(内含一个方法),前端可配合使用jQuery、Jcrop,jQuery就不用说了,Jcrop相关资料可参考官网,其他业务请根据实际需求进行编写。
每个级别代表地图的一个缩放级别,通常与比例尺相关联。级别越多,地图细节越丰富,但所需存储空间也越大。 3. **创建切图金字塔**:ArcGIS Server会按照预设的比例尺级别,自底向上生成一系列瓦片,形成一个金字塔...
根据提供的文件信息,本文将详细解释“天地图切图比例”的相关知识点,包括切图比例、分辨率、比例尺以及相关的技术细节。 ### 天地图切图比例尺介绍 天地图是中国国家测绘地理信息局推出的一个在线地理信息服务...
总结起来,"ajax图片上传 包含切图等效果 php版"项目涵盖了前端交互、Ajax通信、服务器端处理和图片处理等多个技术点,对于提升网站用户体验和功能完善具有重要意义。在实际开发中,开发者需要结合具体业务需求,...
这包括对图像进行裁剪、拼接、缩放、旋转等操作,以将多个2D图像转换为360度全景视图。在Java中,可以使用如Java Advanced Imaging (JAI)库或者Java 2D API来实现这些图像处理任务。 3. **krpano全景技术**:krpano...
最后,根据压缩包内的"MapEditor"文件名,我们可以推测这是一个地图编辑器功能,它可能包含地图的创建、编辑和切图等操作。通过这个工具,开发者可以直接在界面上放置怪物点、障碍点和移动点等元素,然后自动生成...
- 比例尺:根据需要切分的地图级别来确定,比如实验数据的比例尺为1:24576000,对应的切图级别为5级。 投影变换后的EMP工程应该符合以上所有条件。 **附录:切图比例尺表** | 切图级别 | 工程级别 | 地图比例尺...
特别是`java.awt.image`包,其中包含了一系列与图像处理相关的类,如`BufferedImage`、`ImageIO`和`Graphics2D`等。 1. **BufferedImage**:这是Java中用于存储图像数据的对象,它提供了读取、写入和操作图像的功能...
通常,设计师会使用Adobe Photoshop、Sketch或Figma等软件创建设计稿,然后开发者需要将设计稿中的图片、按钮、背景等元素进行切割,生成适合网页使用的图像格式,如PNG、JPEG或SVG。切图时,我们要注意保持元素的...
MXD是ArcGIS中的一种文件格式,它保存了地图布局的所有元素,包括数据源、图层、比例尺、标注等信息。通过编程方式处理MXD,可以自动化地对地图进行编辑、分析和输出。 切图,即把地图分割成一系列小图片,通常用于...
切图原理首先涉及到“Tiling Scheme”,这是一个定义了地图缓存如何创建的参数集合,包括比例尺级别、图片格式和尺寸等。Tiling Scheme Origin 是这个网格体系的左上角,通常与mxd文档使用的坐标系原点一致。地图的...
"PGIS切图工艺流程样本" ...为了生成高质量的PGIS切图,我们需要遵循PGIS特定级别起始点、图像缩放比例尺、PGIS所支持经纬度范畴等原则,并且需要注意调图注意事项、切图辨别率、图片范畴、DPI设立等问题。
在IT行业中,"切图"一词通常...综上所述,"切图+更新包"涵盖了设计、前端开发、版本控制、测试等多个环节,是产品迭代过程中的重要组成部分。处理这样的更新包需要全面考虑用户体验、性能优化以及团队协作的各个方面。
- 瓦片切图基于网格系统,将地图按照一定的分辨率和层级进行切割,每一层级代表地图的不同缩放级别。例如,最基础的层级可能包含整个地球,而更高层级则聚焦于特定区域。 - 每个瓦片通常是一个固定大小的图片(如...