`

JAVA 缩放图像,图像切割,变颜色,转类型

阅读更多
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("C:/1.jpg", "C:/test/", 200, 150); 
} 

} 
分享到:
评论

相关推荐

    缩放图像,图像切割,变颜色,转类型

    工作分享:Java代码实现缩放图像,图像切割,变颜色,转类型

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

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

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

    5. **缩放**:缩放图像可以改变其大小,保持纵横比或不保持。Java 2D API的`BufferedImage`类提供了`getSubimage()`方法进行无损缩放,而`Graphics2D`的`drawImage()`方法配合适当的宽高比例可以进行有损缩放。 6. ...

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

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

    JAVA GIF图像切割

    这个“JAVA GIF图像切割”主题就涉及到如何在Java环境中对GIF图像进行裁剪和保存。 首先,让我们了解GIF图像格式。GIF(Graphics Interchange Format)是一种流行的位图图像格式,支持透明度和动画。由于其跨平台的...

    Java图像处理.pdf

    scale() 方法用于将图像缩放到指定的尺寸,而 cut() 方法用于将图像切割到指定的尺寸。 scale() 方法的实现中,我们可以看到以下几个步骤: 1. 读取源图像文件 2. 获取源图像的宽度和高度 3. 根据缩放比例计算新的...

    基于JAVA的图像处理软件

    - **图像操作**:包括缩放、旋转(90度、180度、270度)、图像灰度化等图像处理基本操作。 - **图像分析**:实现图像的直方图分析,帮助理解图像的像素分布情况。 - **图像变形**:如扭曲、拉伸、展宽等,用于改变...

    图片缩放.rar java实现的图片切割功能

    本教程将聚焦于“图片缩放”与“Java实现的图片切割功能”,这对于初学者理解如何利用编程语言处理图像非常有帮助。 首先,我们要了解什么是图片缩放。图片缩放是指调整图像的尺寸,使其在保持原有比例的基础上变得...

    java 图片 切割 保存

    `javax.imageio`用于读取、写入和操作图像,而`java.awt`提供了图形、颜色、形状和字体的支持。 1. **读取图片** 使用`ImageIO.read()`方法从文件或流中读取图片。例如: ```java File file = new File("path_to...

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

    通过理解等比缩放和图片压缩的概念,以及如何在Java中实现它们,你可以有效地管理图像资源,提升应用的效率和用户体验。在实际操作中,你还可以探索更多高级功能,如色彩空间转换、滤波和增强等,以进一步优化你的...

    java 头像截图 java切割图片

    在Java编程语言中,处理图像任务,如截图和切割图片,是常见的需求,尤其是在开发Web应用或社交平台时,例如用户头像的处理。本文将详细介绍如何使用Java进行头像截图和图片切割。 首先,Java提供了`java.awt.image...

    Java图像处理[文].pdf

    首先,缩放图像的功能是通过调整图像的宽度和高度来实现的。在提供的代码中,定义了一个名为`scale`的方法,接收四个参数:源图像文件路径、结果图像路径、缩放比例和一个标志位,用于判断是放大还是缩小。方法内部...

    jsp js java网页头像切割实例

    综上所述,"jsp js java网页头像切割实例"是一个涵盖了前后端交互、图像处理、文件上传等多个技术点的综合实践。通过学习和掌握这些知识点,开发者能够构建出功能完善且用户体验良好的头像裁剪功能。

    JAVA实现的图片剪切预览

    `java.awt`包提供了图形、颜色、字体等基本元素,而`javax.imageio`包则用于读取、写入和处理各种格式的图像文件。图片剪切通常涉及到获取用户选择的裁剪区域,然后对原始图像进行裁剪操作。这可以通过创建一个...

    QQ背景墙切割

    QQ背景墙切割是一个针对QQ软件个性化设置的专题,主要涉及图像处理、图形用户界面(GUI)设计以及可能的编程技术。在这个过程中,用户通常需要将一张大图分割成适合QQ聊天窗口显示的小图,以便作为自己的聊天背景。...

    SimpleCG图像操作基础

    例如,缩放图像可以使用`resize()`函数,旋转可以使用`rotate()`函数。这些操作在游戏开发中尤为常见,如将大图切割为多个小精灵,或者根据设备屏幕尺寸调整图像大小。 5. **图像透明度处理**: PNG的透明度由阿尔法...

    Java写切图,LOGO添加源码

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

Global site tag (gtag.js) - Google Analytics