`

java 图片切割,缩放,转换类型等等(转)

    博客分类:
  • Web
阅读更多
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.Graphics;
import java.awt.color.ColorSpace;
import javax.imageio.ImageIO;
public class ImageCut {
 /**
  * 缩放图像
  *
  * @param srcImageFile
  *            源图像文件地址
  * @param result
  *            缩放后的图像地址
  * @param scale
  *            缩放比例
  * @param flag
  *            缩放选择:true 放大; false 缩小;
  */
 public static void scale(String srcImageFile, String result, int scale,
   boolean flag) {
  try {
   BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件
   int width = src.getWidth(); // 得到源图宽
   int height = src.getHeight(); // 得到源图长
   if (flag) {
    // 放大
    width = width * scale;
    height = height * scale;
   } else {
    // 缩小
    width = width / scale;
    height = height / scale;
   }
   Image image = src.getScaledInstance(width, height,
     Image.SCALE_DEFAULT);
   BufferedImage tag = new BufferedImage(width, height,
     BufferedImage.TYPE_INT_RGB);
   Graphics g = tag.getGraphics();
   g.drawImage(image, 0, 0, null); // 绘制缩小后的图
   g.dispose();
   ImageIO.write(tag, "JPEG", new File(result));// 输出到文件流
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 /**
  * 图像切割
  *
  * @param srcImageFile
  *            源图像地址
  * @param descDir
  *            切片目标文件夹
  * @param destWidth
  *            目标切片宽度
  * @param destHeight
  *            目标切片高度
  */
 public static void cut(String srcImageFile, String descDir, int destWidth,
   int destHeight) {
  try {
   Image img;
   ImageFilter cropFilter;
   // 读取源图像
   BufferedImage bi = ImageIO.read(new File(srcImageFile));
   int srcWidth = bi.getHeight(); // 源图宽度
   int srcHeight = bi.getWidth(); // 源图高度
   if (srcWidth > destWidth && srcHeight > destHeight) {
    Image image = bi.getScaledInstance(srcWidth, srcHeight,
      Image.SCALE_DEFAULT);
    destWidth = 200; // 切片宽度
    destHeight = 150; // 切片高度
    int cols = 0; // 切片横向数量
    int rows = 0; // 切片纵向数量
    // 计算切片的横向和纵向数量
    if (srcWidth % destWidth == 0) {
     cols = srcWidth / destWidth;
    } else {
     cols = (int) Math.floor(srcWidth / destWidth) + 1;
    }
    if (srcHeight % destHeight == 0) {
     rows = srcHeight / destHeight;
    } else {
     rows = (int) Math.floor(srcHeight / destHeight) + 1;
    }
    // 循环建立切片
    // 改进的想法:是否可用多线程加快切割速度
    for (int i = 0; i < rows; i++) {
     for (int j = 0; j < cols; j++) {
      // 四个参数分别为图像起点坐标和宽高
      // 即: CropImageFilter(int x,int y,int width,int height)
      cropFilter = new CropImageFilter(j * 200, i * 150,
        destWidth, destHeight);
      img = Toolkit.getDefaultToolkit().createImage(
        new FilteredImageSource(image.getSource(),
          cropFilter));
      BufferedImage tag = new BufferedImage(destWidth,
        destHeight, BufferedImage.TYPE_INT_RGB);
      Graphics g = tag.getGraphics();
      g.drawImage(img, 0, 0, null); // 绘制缩小后的图
      g.dispose();
      // 输出为文件
      ImageIO.write(tag, "JPEG", new File(descDir
        + "pre_map_" + i + "_" + j + ".jpg"));
     }
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 /**
  * 图像类型转换
     * GIF->JPG GIF->PNG PNG->JPG PNG->GIF(X)
     */
 public static void convert(String source, String result) {
  try {
   File f = new File(source);
   f.canRead();
   f.canWrite();
   BufferedImage src = ImageIO.read(f);
   ImageIO.write(src, "JPG", new File(result));
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 /**
  * 彩色转为黑白
  *
  * @param source
  * @param result
  */
 public static void gray(String source, String result) {
  try {
   BufferedImage src = ImageIO.read(new File(source));
   ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
   ColorConvertOp op = new ColorConvertOp(cs, null);
   src = op.filter(src, null);
   ImageIO.write(src, "JPEG", new File(result));
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
  //cut("e:/1.jpg", "e:/t/", 200, 150);
 }

}

分享到:
评论

相关推荐

    java高清图片缩放、压缩、切割、水印源码例子

    高清缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等 功能非常强大,并且很清晰,请给好评:)

    图片处理工具类(缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等)

    标题提到的“图片处理工具类”是一个Java编程中的实用工具类,它集成了多种图片处理功能,如图像的缩放、切割、类型转换、彩色转黑白、添加文字水印以及图片水印等。下面将详细解释这些知识点。 1. **图像缩放**: ...

    JAVA ImageJ 支持图片格式转换,图片放大缩小等,功能非常强大,缩略图高清晰,有实例代码

    - **图片放大缩小**:ImageJ可以对图片进行无损或有损的缩放,通过插值算法确保放大后的图片尽可能保持原有的清晰度。 - **缩略图生成**:在`Thumbnail_Maker.java`实例类中,可能包含用于创建高质量缩略图的代码...

    java 水印 图像处理 图片分割 裁剪 缩放

    Java图像处理技术是Java开发中的一个重要领域,涵盖了多种操作,如添加水印、图像分割、裁剪和缩放。在本项目中,这些功能被整合到一个完整的程序中,并通过单元测试进行了验证,确保了各个功能的正确性。此外,程序...

    图片缩放、压缩技术java实现

    本教程将专注于使用Java语言实现图片的等比缩放和压缩技术,以满足存储和传输的需求。下面,我们将深入探讨这些关键知识点。 首先,我们来了解等比缩放。等比缩放是指在改变图片尺寸时,保持其长宽比不变,防止图片...

    java实现将OBJ转换为3Dtiles

    本主题聚焦于使用Java编程语言将OBJ格式的3D模型转换为3DTiles格式,这是一种由Cesium库支持的高效、轻量级的3D场景分发格式。以下是对这个过程的详细阐述: 首先,OBJ(Wavefront Object)是一种通用的3D模型格式...

    java实现多张jgp图片转动画gif格式

    在Java编程环境中,将多张JPEG格式的图片转换为动态GIF格式是一项常见的图像处理任务。这个Demo展示了如何使用Java的图像处理库来完成这一过程。以下是对这个过程的详细解释: 首先,我们需要一个能够处理GIF格式的...

    Java图片处理

    通过以上几个示例,我们可以看到 Java 提供了丰富的 API 来处理各种图片操作,包括缩放、切割、格式转换以及彩色转黑白等。这些功能不仅能够满足基本的需求,还提供了很多扩展的可能性,使得 Java 成为了处理图像的...

    Java将大图片转成小图片

    在Java编程语言中,处理大图片并将其转换为小图片是一项常见的任务,特别是在网页开发、移动应用或图像处理系统中。这个过程涉及到图像缩放,它可以帮助减少存储空间占用,加快图片加载速度,并优化用户体验。以下是...

    java图片处理工具类

    该类提供了丰富的图片处理功能,包括但不限于缩放图像、切割图像、图像类型转换、彩色转黑白、添加文字水印、图片水印等。 #### 二、核心功能介绍 1. **缩放图像**:支持按比例放大或缩小图片。 2. **切割图像**:...

    ImageUtil 图片高保真缩放与裁剪,不依赖于任何第三方库

    在`ImageUtil.java`文件中,我们可以期待看到定义了用于图片缩放和裁剪的相关方法。这些方法可能包括`scaleImage()`用于图片缩放,以及`cropImage()`用于图片裁剪。它们可能接收`BufferedImage`对象作为输入,这是...

    JAVA实现的图片剪切预览

    本项目聚焦于使用JAVA实现图片的剪切预览功能,并结合JQUERY前端控件来提供用户友好的交互体验。以下将详细阐述相关知识点。 首先,让我们关注“JAVA实现的图片剪切预览”这一主题。在Java中,处理图片主要依靠Java...

    位图转G代码工具

    位图转G代码工具是一种专为激光雕刻机设计的实用软件,它能够将常见的位图图像格式(如BMP、JPEG、PNG等)转换成G代码,这种代码是数控机床和激光雕刻机所理解的语言。G代码,也称为RS-274,是一系列由字母、数字和...

    百度地图瓦片工具(JAVA完整工程)

    在GIS(地理信息系统)领域,地图瓦片是一种将大尺寸地图分割成小块图片的技术,通常用于提高网络地图服务的加载速度和显示效率。这个JAVA工程提供了一整套解决方案,可以帮助用户生成、裁剪、管理和使用百度地图的...

    jsp 图片的旋转

    提供的"ImageTrans"可能包含实现上述功能的Java代码,包括读取图片、旋转、缩放、以及在JSP页面上的展示。具体实现可能包括一个Servlet或Controller,用于处理请求,以及一个JSP页面,用于显示图片并处理用户交互。...

    Java OCR 图像智能字符识别技术,可识别中文

    Java OCR(Optical Character Recognition,光学字符识别)技术是一种计算机视觉领域的应用,它能将图像中的文字转换成可编辑的文本格式。这项技术在各种场景下都有广泛应用,比如文档扫描、车牌识别、发票处理等。...

    Openoffice转换多列EXCEL为PDF行列对应解决方法

    将Excel文件按列数分割成多个小文件,然后逐个转换,最后合并PDF文件。 6. **代码自动化**:对于重复性工作,可以编写脚本来自动化转换过程。例如,使用Python的pandas库和PDF库(如PyPDF2或PDFMiner)可以批量处理...

    java图像各种基本操作

    这些操作包括傅立叶变换(FFT),图像分割,缩放,哈夫曼编码(Huffman编码),以及镜像等。下面将对这些知识点进行详细阐述。 首先,Java Advanced Imaging (JAI) 是一个扩展Java 2D API的功能库,提供了高级图像处理...

    GDAL4 java库

    7. **栅格金字塔**:GDAL4Java支持构建和管理栅格金字塔,用于快速显示和缩放操作。 8. **瓦片化**:GDAL4Java可以将大栅格数据集转换为基于Web的瓦片格式,如Google Maps、TMS(Tile Map Service)等,方便在网络...

Global site tag (gtag.js) - Google Analytics