- 浏览: 3430836 次
- 性别:
- 来自: 珠海
文章分类
- 全部博客 (1633)
- Java (250)
- Android&HTML5 (111)
- Struts (10)
- Spring (236)
- Hibernate&MyBatis (115)
- SSH (49)
- jQuery插件收集 (55)
- Javascript (145)
- PHP (77)
- REST&WebService (18)
- BIRT (27)
- .NET (7)
- Database (105)
- 设计模式 (16)
- 自动化和测试 (19)
- Maven&Ant (43)
- 工作流 (36)
- 开源应用 (156)
- 其他 (16)
- 前台&美工 (119)
- 工作积累 (0)
- OS&Docker (83)
- Python&爬虫 (28)
- 工具软件 (157)
- 问题收集 (61)
- OFbiz (6)
- noSQL (12)
最新评论
-
HEZR曾嶸:
你好博主,这个不是很理解,能解释一下嘛//左边+1,上边+1, ...
java 两字符串相似度计算算法 -
天使建站:
写得不错,可以看这里,和这里的这篇文章一起看,有 ...
jquery 遍历对象、数组、集合 -
xue88ming:
很有用,谢谢
@PathVariable映射出现错误: Name for argument type -
jnjeC:
厉害,困扰了我很久
MyBatis排序时使用order by 动态参数时需要注意,用$而不是# -
TopLongMan:
非常好,很实用啊。。
PostgreSQL递归查询实现树状结构查询
http://my.oschina.net/686991/blog/643839
/**网上看到了一篇关于JAVA图像处理的文章,博主贴出了一个处理类:特点是高品质缩小,具体代码如下: * http://www.blogjava.net/kinkding/archive/2009/05/23/277552.html * 上面的代码中,本人做了一点小改进:imageZoomOut方法中,添加了一个lockScale参数,如果为true则表明保持纵横比。*/ private int width; private int height; private int scaleWidth; double support = (double) 3.0; double[] contrib; double[] normContrib; double[] tmpContrib; int startContrib, stopContrib; int nDots; int nHalfDots; public BufferedImage imageZoomOut(BufferedImage srcBufferImage, int w, int h, boolean lockScale) { width = srcBufferImage.getWidth(); height = srcBufferImage.getHeight(); scaleWidth = w; if (lockScale) { h = w * height / width; } if (DetermineResultSize(w, h) == 1) { return srcBufferImage; } CalContrib(); BufferedImage pbOut = HorizontalFiltering(srcBufferImage, w); BufferedImage pbFinalOut = VerticalFiltering(pbOut, h); return pbFinalOut; } /** * 决定图像尺寸 */ private int DetermineResultSize(int w, int h) { double scaleH, scaleV; scaleH = (double) w / (double) width; scaleV = (double) h / (double) height; // 需要判断一下scaleH,scaleV,不做放大操作 if (scaleH >= 1.0 && scaleV >= 1.0) { return 1; } return 0; } // end of DetermineResultSize() private double Lanczos(int i, int inWidth, int outWidth, double Support) { double x; x = (double) i * (double) outWidth / (double) inWidth; return Math.sin(x * Math.PI) / (x * Math.PI) * Math.sin(x * Math.PI / Support) / (x * Math.PI / Support); } // end of Lanczos() // // Assumption: same horizontal and vertical scaling factor // private void CalContrib() { nHalfDots = (int) ((double) width * support / (double) scaleWidth); nDots = nHalfDots * 2 + 1; try { contrib = new double[nDots]; normContrib = new double[nDots]; tmpContrib = new double[nDots]; } catch (Exception e) { System.out.println("init contrib,normContrib,tmpContrib" + e); } int center = nHalfDots; contrib[center] = 1.0; double weight = 0.0; int i = 0; for (i = 1; i <= center; i++) { contrib[center + i] = Lanczos(i, width, scaleWidth, support); weight += contrib[center + i]; } for (i = center - 1; i >= 0; i--) { contrib[i] = contrib[center * 2 - i]; } weight = weight * 2 + 1.0; for (i = 0; i <= center; i++) { normContrib[i] = contrib[i] / weight; } for (i = center + 1; i < nDots; i++) { normContrib[i] = normContrib[center * 2 - i]; } } // end of CalContrib() // 处理边缘 private void CalTempContrib(int start, int stop) { double weight = 0; int i = 0; for (i = start; i <= stop; i++) { weight += contrib[i]; } for (i = start; i <= stop; i++) { tmpContrib[i] = contrib[i] / weight; } } // end of CalTempContrib() private int GetRedValue(int rgbValue) { int temp = rgbValue & 0x00ff0000; return temp >> 16; } private int GetGreenValue(int rgbValue) { int temp = rgbValue & 0x0000ff00; return temp >> 8; } private int GetBlueValue(int rgbValue) { return rgbValue & 0x000000ff; } private int ComRGB(int redValue, int greenValue, int blueValue) { return (redValue << 16) + (greenValue << 8) + blueValue; } // 行水平滤波 private int HorizontalFilter(BufferedImage bufImg, int startX, int stopX, int start, int stop, int y, double[] pContrib) { double valueRed = 0.0; double valueGreen = 0.0; double valueBlue = 0.0; int valueRGB = 0; int i, j; for (i = startX, j = start; i <= stopX; i++, j++) { valueRGB = bufImg.getRGB(i, y); valueRed += GetRedValue(valueRGB) * pContrib[j]; valueGreen += GetGreenValue(valueRGB) * pContrib[j]; valueBlue += GetBlueValue(valueRGB) * pContrib[j]; } valueRGB = ComRGB(Clip((int) valueRed), Clip((int) valueGreen), Clip((int) valueBlue)); return valueRGB; } // end of HorizontalFilter() // 图片水平滤波 private BufferedImage HorizontalFiltering(BufferedImage bufImage, int iOutW) { int dwInW = bufImage.getWidth(); int dwInH = bufImage.getHeight(); int value = 0; BufferedImage pbOut = new BufferedImage(iOutW, dwInH, BufferedImage.TYPE_INT_RGB); for (int x = 0; x < iOutW; x++) { int startX; int start; int X = (int) (((double) x) * ((double) dwInW) / ((double) iOutW) + 0.5); int y = 0; startX = X - nHalfDots; if (startX < 0) { startX = 0; start = nHalfDots - X; } else { start = 0; } int stop; int stopX = X + nHalfDots; if (stopX > (dwInW - 1)) { stopX = dwInW - 1; stop = nHalfDots + (dwInW - 1 - X); } else { stop = nHalfDots * 2; } if (start > 0 || stop < nDots - 1) { CalTempContrib(start, stop); for (y = 0; y < dwInH; y++) { value = HorizontalFilter(bufImage, startX, stopX, start, stop, y, tmpContrib); pbOut.setRGB(x, y, value); } } else { for (y = 0; y < dwInH; y++) { value = HorizontalFilter(bufImage, startX, stopX, start, stop, y, normContrib); pbOut.setRGB(x, y, value); } } } return pbOut; } // end of HorizontalFiltering() private int VerticalFilter(BufferedImage pbInImage, int startY, int stopY, int start, int stop, int x, double[] pContrib) { double valueRed = 0.0; double valueGreen = 0.0; double valueBlue = 0.0; int valueRGB = 0; int i, j; for (i = startY, j = start; i <= stopY; i++, j++) { valueRGB = pbInImage.getRGB(x, i); valueRed += GetRedValue(valueRGB) * pContrib[j]; valueGreen += GetGreenValue(valueRGB) * pContrib[j]; valueBlue += GetBlueValue(valueRGB) * pContrib[j]; } valueRGB = ComRGB(Clip((int) valueRed), Clip((int) valueGreen), Clip((int) valueBlue)); // System.out.println(valueRGB); return valueRGB; } // end of VerticalFilter() private BufferedImage VerticalFiltering(BufferedImage pbImage, int iOutH) { int iW = pbImage.getWidth(); int iH = pbImage.getHeight(); int value = 0; BufferedImage pbOut = new BufferedImage(iW, iOutH, BufferedImage.TYPE_INT_RGB); for (int y = 0; y < iOutH; y++) { int startY; int start; int Y = (int) (((double) y) * ((double) iH) / ((double) iOutH) + 0.5); startY = Y - nHalfDots; if (startY < 0) { startY = 0; start = nHalfDots - Y; } else { start = 0; } int stop; int stopY = Y + nHalfDots; if (stopY > (int) (iH - 1)) { stopY = iH - 1; stop = nHalfDots + (iH - 1 - Y); } else { stop = nHalfDots * 2; } if (start > 0 || stop < nDots - 1) { CalTempContrib(start, stop); for (int x = 0; x < iW; x++) { value = VerticalFilter(pbImage, startY, stopY, start, stop, x, tmpContrib); pbOut.setRGB(x, y, value); } } else { for (int x = 0; x < iW; x++) { value = VerticalFilter(pbImage, startY, stopY, start, stop, x, normContrib); pbOut.setRGB(x, y, value); } } } return pbOut; } // end of VerticalFiltering() int Clip(int x) { if (x < 0) return 0; if (x > 255) return 255; return x; } public static void main(String[] args) throws IOException { ImageScale is = new ImageScale(); String path = "F:\\web\\test\\ImageTrans\\"; BufferedImage image1 = ImageIO.read(new File(path + "Koala.jpg")); int w = 200, h = 400; BufferedImage image2 = is.imageZoomOut(image1, w, h, true); FileOutputStream out = new FileOutputStream(path + "test_2.jpg"); ImageIO.write(image2, "jpeg", out); }
发表评论
-
Java Comparable和Comparator
2016-06-26 08:52 706http://my.oschina.net/android52 ... -
Java集合框架之fastutil & koloboke
2016-06-23 14:04 2480Java集合框架之fastutil http://rensan ... -
ehcache 分布式支持
2016-06-05 22:26 1103原文 http://my.oschina.net/glenxu ... -
Intellij IDEA插件开发入门
2016-05-26 11:42 2889原文: http://blog.csdn.net/dc_726 ... -
阿里巴巴Druid数据源的配置与使用
2016-05-24 17:42 1551http://my.oschina.net/wjme/blog ... -
mysql中间件研究(Atlas,cobar,TDDL), 分库分表插件
2016-05-09 14:15 3456http://www.guokr.com/blog/47576 ... -
Java集合: Queue和Deque
2016-05-09 09:49 1869Queue http://my.oschina.net/kev ... -
使用gzip优化web应用(filter实现)
2016-05-07 01:45 1034使用gzip优化web应用(filter实现) http:// ... -
Byteman 3.0.5 发布,Java 字节码注入工具
2016-04-23 10:29 1774Byteman 3.0.5 发布,Java 字 ... -
RandomStringUtils的说明和生成随机汉字
2016-04-20 15:21 1404更多参考: http://my.oschina.net/wil ... -
通过IP地址获取地理位置
2016-04-20 15:19 899http://my.oschina.net/githubhty ... -
Java编程中使用正则表达式过滤非数字字符串
2016-04-14 13:51 1725/** * * @param str ... -
非对称加密DH算法,DH代码实现
2016-04-13 11:33 1363RSA算法原理(一)http:// ... -
企业支付宝账号开发接口教程
2016-03-31 14:52 1246企业支付宝账号开发接口教程--JAVA-UTF-8(实际操作- ... -
java double类型数据操作工具类
2016-03-28 17:36 1251http://my.oschina.net/yxwblog/b ... -
double转换到BigDecimal
2016-03-28 17:11 1554BigDecimal b = new BigDecimal(d ... -
Java 生成好看的验证码
2016-03-23 10:52 3370http://www.oschina.net/code/sni ... -
Linux环境安装配置Swftools
2016-03-22 21:01 1112http://tetop.blog.51cto.com/188 ... -
java压缩与解压缩文件
2016-03-20 22:03 1473http://www.oschina.net/code/sni ... -
会话状态保持,JSESSIONID,COOKIE,URL重写
2016-03-17 20:26 1769http://my.oschina.net/sniperLi/ ...
相关推荐
在Java编程语言中,处理图像是一项常见的任务,其中包括图片压缩。Java提供了丰富的API来处理图像,其中`java.awt.image.BufferedImage`和`javax.imageio.ImageIO`类是核心工具。本篇文章将深入探讨如何利用Java后台...
在Java编程语言中,处理图片压缩是一项常见的任务,特别是在存储、传输或展示大量图像资源时。本主题将深入探讨如何使用Java实现图片压缩,并能够将其调整到任意大小,同时保持图片质量并避免变形。 首先,我们需要...
但是,这个"java图片压缩通用类"可能是开发者自定义的一个类,它可能封装了一些常见的图像处理操作,如调整尺寸、改变质量参数以及保存为不同的格式。 图片压缩通常涉及两个主要方面:尺寸压缩和质量压缩。尺寸压缩...
在Java编程语言中,处理图片压缩是一项常见的任务,特别是在网页开发、移动应用或者任何需要减小图片文件大小的场景中。"java图片压缩处理 支持gif"这个标题表明我们将探讨如何使用Java来处理和压缩GIF动态图,因为...
在这个"java-for-image-compression.zip"压缩包中,包含了一个名为"java实现图像压缩.txt"的文件,它很可能提供了关于如何使用Java实现图像不失真等比例压缩的算法的详细步骤和代码示例。 图像压缩的主要目标是减少...
下面我们将深入探讨Java图片压缩的相关知识点。 1. **图片格式** 图片格式有很多种,如JPEG、PNG、GIF、BMP等。不同的格式有不同的压缩算法和用途。JPEG适用于连续色调的图片,如照片,支持有损压缩;PNG适合于...
java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理
<br>在jdk1.6以下的版本环境下,压缩部分图片会很慢,经过我测试,如果图片的DPI越高,速度越慢,一般WEB使用图片DPI都是72,速度很快。大家可以试下。我测试了几张DPI为300,印刷品质的图片,大概要35秒左右,...
Java图片压缩工具类,根据宽度、高度进行压缩图片。如有意见,欢迎指出
java 图片压缩详细讲解,可对图片自定义压缩后的宽度,高度,质量等功能。
"Thumbnails 纯java图片压缩api 包括文档及相关学习资料" 是一个专为Java开发者设计的图片压缩库,旨在提供高效的图片压缩解决方案。下面将详细介绍这个API的核心特性、使用方法以及为何它能在Java图片处理领域...
首先,我们来看看使用Java标准库中的`javax.imageio.ImageIO`类进行图片压缩。`ImageIO`类提供了读取、写入和处理图像的功能。以下是一个简单的示例,展示如何读取一个图片文件,然后以较低的质量重新保存,从而达到...
采用JDK自带的图片除理类对图片进行压缩,可以将4M的图片文件压缩成100K以下
总之,Java图片压缩工具利用Java的图像处理库,结合不同的压缩策略,能够有效地对图片进行压缩,满足不同场景的需求。无论是简单的尺寸调整还是复杂的质量控制,Java都能提供足够的工具和灵活性来处理这些问题。对于...
在Java编程语言中,处理图片压缩是一个常见的任务,特别是在网页开发、存储优化或者移动应用中。这个主题主要涉及如何利用Java来减少图片文件的大小,包括静态图片(如JPEG、PNG)以及动态图片(如GIF)。下面我们将...
本篇文章将详细介绍如何利用Java来处理这个问题,特别是如何编写一个图片压缩和旋转的工具类。 首先,我们需要引入处理图像元数据和压缩的库。在Java中,一个常用的库是Apache的Commons Imaging,它以前称为JAI-...
java图片压缩,处理前台上传大图片(尼玛,大于20个字俺特么怎么编啊)
Java压缩图片util,可等比例宽高不失真压缩,也可直接指定压缩后的宽高,只能用炫酷来形容,感兴趣就下载看看吧
这个Java图片压缩程序作为一个计算机专业的作业,旨在帮助学生理解和实现图像压缩算法,同时提供用户友好的界面,使得操作更为简便。 首先,我们要理解Java作为编程语言在图像处理中的应用。Java提供了丰富的API,...