标签存档: JAVA

在JAVA中将透明的图像转换成JPEG格式

source on github

在JAVA中将图像文件转换成JPEG,通常使用下面的代码:

File __pngFile = new File("exportUnit.png");
File __jpgFile = new File("exportUnit.jpg");
writeJPEG(__pngFile, __jpgFile, 80);
 
public static void writeJPEG(File $source, File $dest, int $quality) throws IOException
{
    String __formatName = "jpeg";
    BufferedImage __image = ImageIO.read($source);
    ImageWriter __writer = ImageIO.getImageWritersByFormatName(__formatName).next();
    ImageWriteParam __writeParam = __writer.getDefaultWriteParam();
    FileOutputStream __out = new FileOutputStream($dest);
    __writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
    __writeParam.setCompressionQuality((float)$quality/100f);
    __writer.setOutput(ImageIO.createImageOutputStream(__out));
    __writer.write(null, new IIOImage(__image, null, null), __writeParam);
    __out.flush();
    __out.close();
    __writer.dispose();
}

但是,当被转换的文件是32位带Alpha通道的图像文件转换为JPEG的时候,会出现颜色错误。就像下面这样: 继续阅读 »

将图像的透明区域转换为Alpha通道原理

Sprite Sheep Editor中,使用了这样的一个小技术(思路来自这里):将透明图像的Alpha通道转换成黑白(灰度)图像,然后与正常图像拼合成一张大图,再存储成JPEG格式。

这方法其实是一个折中方案。因为JPEG格式是不支持透明的,很多时候为了获得透明效果,我们只能使用PNG格式。但PNG是无损压缩的,在图像尺寸上没有优势。如果将Alpha通道转换成黑白图并保存到JPEG图像中,就能大幅降低最终的图像文件大小。

在我的测试中,一个2000×3300的32位带Alpha通道的PNG图像文件大小为2MB,转换为4000×3300(因为拼合了黑白图片,宽度增加一倍)70%压缩比的JPEG后,文件大小为1.1MB。

当然,转换后的JPEG文件画质比PNG要稍差一些。这可以通过调整压缩比得到一定程度的改善。

要将图像的Alpha通道转换为黑白图像,在AS3中很容易: 继续阅读 »

[转]Java socket – 套接字基础

套接字处理代码只存在于表示层中

转自:http://caihx.javaeye.com/blog/605143

套接字基础
1. 介绍

多数程序员,不管他们是否使用 Java 语言进行编码,都不想很多知道关于不同计算机上的应用程序彼此间如何通信的低级细节。程序员们希望处理更容易理解的更高级抽象。Java 程序员希望能用他们熟悉的 Java 构造,通过直观接口与对象交互。

套接字在两个领域中都存在 ― 我们宁愿避开的低级细节和我们更愿处理的抽象层。本教程讨论的低级细节将只限于理解抽象应用程序所必须的部分。 继续阅读 »