`
rogue0608
  • 浏览: 7485 次
  • 性别: Icon_minigender_1
  • 来自: 福建
最近访客 更多访客>>
社区版块
存档分类
最新评论

图片切割和压缩

 
阅读更多
/**
* 图像切割(改) *
*
* @param srcImageFile
*            源图像地址
* @param dirImageFile
*            新图像地址
* @param x
*            目标切片起点x坐标
* @param y
*            目标切片起点y坐标
* @param destWidth
*            目标切片宽度
* @param destHeight
*            目标切片高度
*/
public static void abscut(String srcImageFile, String dirImageFile, int x,
int y, int destWidth, int destHeight) {
try {
Image img;
ImageFilter cropFilter;
// 读取源图像
BufferedImage bi = ImageIO.read(new File(srcImageFile));
int srcWidth = bi.getWidth(); // 源图宽度
int srcHeight = bi.getHeight(); // 源图高度
if (srcWidth >= destWidth && srcHeight >= destHeight) {
Image image = bi.getScaledInstance(srcWidth, srcHeight,
Image.SCALE_DEFAULT);
// 改进的想法:是否可用多线程加快切割速度
// 四个参数分别为图像起点坐标和宽高
// 即: CropImageFilter(int x,int y,int width,int height)
cropFilter = new CropImageFilter(x, y, 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, "JPG", new File(dirImageFile));
}
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 压缩图片方法
*
* @param oldFile
*            将要压缩的图片
* @param width
*            压缩宽
* @param height
*            压缩长
* @param quality
*            压缩清晰度 <b>建议为1.0</b>
* @param smallIcon
*            压缩图片后,添加的扩展名
* @return
* @throws java.io.IOException
*/
public static String proce(String oldFile, int width, int height,
float quality, String smallIcon) throws java.io.IOException {
if (oldFile == null) {
return null;
}
String newImage = null;
try {
File file = new File(oldFile);
if (!file.exists()) // 文件不存在时
return null;
/** 对服务器上的临时文件进行处理 */
Image srcFile = ImageIO.read(file);
// 为等比缩放计算输出的图片宽度及高度
double rate1 = ((double) srcFile.getWidth(null)) / (double) width
+ 0.1;
double rate2 = ((double) srcFile.getHeight(null)) / (double) height
+ 0.1;
double rate = rate1 > rate2 ? rate1 : rate2;
int new_w = (int) (((double) srcFile.getWidth(null)) / rate);
int new_h = (int) (((double) srcFile.getHeight(null)) / rate);
/** 宽,高设定 */
BufferedImage tag = new BufferedImage(new_w, new_h,
BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(srcFile, 0, 0, new_w, new_h, null);
String filePrex = oldFile.substring(0, oldFile.indexOf('.'));
/** 压缩后的文件名 */
// newImage =smallIcon + filePrex
// +oldFile.substring(filePrex.length());
newImage = filePrex + smallIcon
+ oldFile.substring(filePrex.length());
System.out.println(newImage);
// newImage = smallIcon;
/** 压缩之后临时存放位置 */
FileOutputStream out = new FileOutputStream(newImage);

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);
/** 压缩质量 */
jep.setQuality(quality, true);
encoder.encode(tag, jep);

out.close();
srcFile.flush();

} catch (FileNotFoundException e) {
e.printStackTrace();
}
return newImage;
}
[size=xx-small][/size]
分享到:
评论

相关推荐

    [WebApi] 捣鼓一个资源管理器--服务器端分割压缩图片 [草稿]

    【WebApi】捣鼓一个资源管理器--服务器端分割压缩图片 在Web开发中,我们经常需要处理大量的图片资源,特别是在构建一个资源管理系统时。WebApi作为.NET Framework的一部分,为创建HTTP服务提供了一种轻量级、灵活...

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

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

    C#实现图片切割的方法

    "C#实现图片切割的方法" 本文主要介绍了C#实现图片切割的方法,涉及C#使用Graphics实现图片属性的相关设置、保存等操作技巧...通过理解和掌握这些知识,我们可以轻松地实现图片切割的功能,提高我们的编程效率和质量。

    图片无损压缩软件

    3. **基于块的压缩**:将图片分割成小块,对每个块独立进行压缩。如JPEG-LS和WebP格式,它们结合了无损和有损压缩,但提供了无损压缩选项。 4. **离散余弦变换(DCT)**:虽然DCT常用于有损压缩,但在特定条件下也...

    PhotoScape图片压缩处理

    本文将深入探讨如何使用PhotoScape进行图片压缩处理,以及它在实际应用中的技巧和注意事项。 一、认识PhotoScape PhotoScape是一款由MOOII Tech开发的全面型图像处理软件,提供了包括查看、编辑、拼接、分割、转换...

    JPEG图片压缩软件

    用户可以利用JPEG图片压缩软件进行图像压缩,并通过选择不同的压缩级别来调整图像质量和文件大小之间的平衡。压缩级别越高,压缩后文件的尺寸就越小,相应的图像质量也会有所下降。尽管如此,这种质量下降往往不易被...

    基于C++的图片压缩设计与实现.zip

    ①将图片分割为小块。由于一般的图片信息处理算法都是针对8×8的像素矩阵来说明的,所以应当将原图片划分为多个8×8的小块,进而方便后续压缩、编码过程中能够逐一对每个小块进行操作。 ②将图片更换为YCbCr方式存储...

    图片流压缩,不同样设置图片的压缩比

    图片压缩分为两种主要类型:无损压缩和有损压缩。无损压缩保留了原始数据的所有细节,可以完全恢复原图,但压缩率通常较低。有损压缩则会丢失部分数据,虽然压缩率更高,但可能导致图像质量下降。图片流压缩属于有损...

    C#图片切割、图片压缩、缩略图生成代码汇总

    在C#编程中,处理图像任务是常见的需求,如图片切割、图片压缩和缩略图生成。这些功能在网页开发、图像处理应用以及各种多媒体项目中都有广泛的应用。以下是对给定代码段的详细解释: 1. **图片切割**: - `...

    VC++图片分割器 VC++图片分割器

    总的来说,"VC++图片分割器"是一款利用VC++和相关图像处理库开发的实用工具,它实现了按用户需求动态切割图片的功能,为图像处理工作带来了便利。开发者可以通过理解这些基本原理和操作步骤,进一步定制自己的图像...

    JPG图片压缩软件

    总的来说,JPG图片压缩软件是图像处理中不可或缺的工具,它们提供了灵活的选项,以适应不同用户的需求,同时兼顾了图像质量和存储效率。在处理大量JPG图片时,选择一款高效且功能全面的压缩软件能极大地提高工作效率...

    图片的压缩工程

    图片压缩分为无损压缩和有损压缩两种类型。 1. **无损压缩**:这种压缩方式可以完全恢复原始数据,不会导致任何质量损失。常见的无损压缩算法有ZIP和RAR,它们通过查找和替换重复数据来减小文件大小。然而,对于...

    图片压缩技术

    图片压缩主要分为两种类型:有损压缩和无损压缩。有损压缩如JPEG,通过去除人眼难以察觉的图像信息(如高频色彩细节)来压缩图像,压缩比高但可能导致图像质量损失。无损压缩如PNG,它能完全恢复原始数据,但压缩比...

    头像压缩切割上传

    这个过程涉及到几个关键技术点,包括图片压缩、图片切割和文件上传。以下是对这些技术的详细说明: 1. **图片压缩**:图片压缩的主要目的是减小文件大小,以便更快地传输和存储。常见的图片压缩算法有JPEG、PNG和...

    图片压缩工具 jpg 图片压缩

    如果原始图片受到版权保护,未经许可的压缩和分发可能会引发法律纠纷。因此,合理使用和尊重版权是非常重要的。 总之,jpg图片压缩是数字图像处理中的一个重要环节,涉及到图像质量与文件大小之间的平衡。理解其...

    asp图片切割.rar

    图片切割的基本原理是将一个大图片分割成多个小图片,每个小图片代表原图的一部分。当用户访问网页时,浏览器只加载必要的小图片,而不是一次性加载整个大图片。这样可以显著减少页面加载时间,特别是在低带宽环境下...

    基于3D-DCT变化的图像压缩解压缩算法,分别处理单个图片和视频图像序列。使用matlab2021a或者以上版本测试

    在图像和视频处理领域,压缩技术是至关重要的,它能够减少数据存储空间并加快传输速度。本项目聚焦于一种特定的图像和视频压缩算法——基于3D离散余弦变换(3D-DCT)的方法。这种方法通过将图像或视频序列转换到频域...

    android图片无损压缩

    2. Picasso:Picasso是另一个广泛使用的图片加载库,它也支持图片的压缩和缩放。 3. Fresco:Facebook推出的图片处理库,不仅支持无损压缩,还能处理复杂的图片内存管理,避免OOM错误。 4. Android-Image-...

    JPEG静态图片压缩标准

    随着时间的推移,JPEG标准有了许多扩展和改进,例如JPEG 2000引入了更高效的编码方式和区域编码,支持无损压缩和逐级显示;还有JPEG XR,它提供更高的压缩效率和色彩深度支持。 总结,JPEG静态图片压缩标准是数字...

    JPG图片批量压缩

    在数字媒体领域,图片压缩是一项常见的任务,尤其对于摄影师、设计师以及网站管理员来说,它能够有效地减少图片的存储空间和网络传输时间。JPG(Joint Photographic Experts Group)是一种广泛使用的有损压缩格式,...

Global site tag (gtag.js) - Google Analytics