在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的时候,会出现颜色错误。就像下面这样: 继续阅读 »

使用Vim将批量将快捷方式转换为TypeAndRun的Config.ini格式

关于快速启动,我最早使用的是Win+R这种绿色的方式。但由于要记忆大量的自定义文件名,且不支持模糊查找,我改用了Find and Run Robot (FARR)

但突然有一天,我感觉FARR实在是太慢了……

于是我改用TypeAndRun

原来用FARR的时候,我是把一堆常用的快捷方式放在一个文件夹中,然后在FARR中将这个文件夹加入索引位置,以实现快速启动。4年多来,这个文件夹中有88个快捷方式。

现在Type And Run要求将所有的自定义别名加入到Config.ini中。一个个手动加实在是太痛苦了,我用Vim写了个脚本实现它: 继续阅读 »

Flash Player 11-真实的和不真实的消息

将图像的透明区域转换为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中很容易: 继续阅读 »

Flash Player 11应该在两周后发布

2011-09-21:Adobe已经修正了我提交的这个bug,并在安全更新最后做出了感谢。但并非在v11中修正的,而是在v10.3.183.10中修正,安全更新在这里:http://www.adobe.com/support/security/bulletins/apsb11-26.html。所以我先前的推论可能不正确。但我想,Adobe很可能在10月3日的MAX大会上发布Flash Player 11。


今天Adobe给我发来邮件,告知我原来提交的关于FlashPlayer在执行NetStream.play的时候崩溃的问题已经解决,并询问我是否要加入安全公告致谢部分:

Thank you again for sending us the Flash Player Netstream issue. This issue should be resolved in the upcoming release of Adobe Flash, currently planned for the next couple of weeks. Please let us know how you would like to be included in the Acknowledgements section of the upcoming Security Bulletin:

这样,也就说明Flash Player 11应该是在两周后发布。

使用Vim修复Sprite Sheet Editor 0.5.6版生成的错误XML文件

Sprite Sheet Editor 0.5.6有一个很重大的Bug,在保存metadata的时候,我将frame的ow/oh属性保存成了与w/h属性相同的值。

根据Sprite Sheet Editor修剪每帧中的空白区域的原理说明可以知道,对于剪切过空白的帧来说,ow和oh是还原原始帧大小的关键。如果这两个值出错,会导致无法取得动画的正确尺寸。

好在这个是可以回溯的。可以通过比较某个Label包含的所有帧的尺寸,通过ox/oy和w/h计算出每帧的实际尺寸,最大的那一个,就是该Label中的所有帧的统一ow/oh属性值。

使用这个方法,得到的实际值,甚至比原来通过Sprite Sheet Editor进行手工设定的值更小,也就是更加节省内存。

选择什么工具处理?AS3有强悍的E4X,JAVA和BASH也不错。但我正好想学习下Vim脚本,就用它了!

处理思路: 继续阅读 »

[转]ColorMatrixFilter色彩矩阵滤镜

转自蜗牛的博客

matrix是一个长度为4*5=20的数组,其构成如下所示:

 R  ,G,  B,  A, offset
[1,  0,  0,  0,  0]); // red
[0,  1,  0,  0,  0]); // green
[0,  0,  1,  0,  0]); // blue
[0,  0,  0,  1,  0]); // alpha

上面是matrix的初始状态。

下面我分先来分析一下其初始状态。

red通道的值:(1,0,0,0,0)表示,R通道的乘数是1(完全保留),别的道道的的乘数是0,(不加入别的通道的颜色),色彩偏移量off是0;

别的通道依次类推。

下面来做一些效果,增加对colorMatrixFilter的认识: 继续阅读 »

AIR3开始支持外部扩展

AIR看来一直想脱掉玩具的帽子,继AIR2开始支持本地进程通信后,AIR3又开始支持本地插件了,这真是个好消息。具体的支持情况是这样的:

  • Android平台:Java包文件 (.jar) 或共享库文件(.so)
  • iOS:静态库(.a)
  • OS X :Framework (.framework)
  • Windows:动态链接库(.dll)

有了这个东东,可以说AIR真是如猫添翼啊!

详细介绍(英文):http://www.adobe.com/devnet/air/articles/extending-air.html

使用Embed标签在AS3项目中嵌入字体

2011年9月10日更新:根据网友zszen的回复,找到这样几篇更详细的文章:


source on github

关于嵌入字体,其实Embed fonts这篇文章已经很详细的介绍了。但这篇文章有这样几个问题:

  1. 它是针对Flex开发者的,纯AS开发者看起来未免不爽;
  2. 没有讲解怎么使用在Flash IDE中嵌入的字体;
  3. 嵌入字体就那么点东西,其实不值得花功夫读这一大篇鸟语(介是偷懒……)

那我就把要点总结下…… 继续阅读 »

编辑Sprite Sheet的小工具:sprite sheet editor v0.5.7发布

2011-09-02:v0.5.7版发布

  1. 解决metadata中frame的的ow和oh与w和h相等的重大BUG
  2. 现在可以把帧还原到“修剪空白”前的状态;
  3. 使用SharedObject保存设置。目前仅实现了帧率的保存。

更多的功能介绍以及软件下载,看这里