最近在搞JSI 的重構,少來冒泡了。
發一個中午的剛用到的小技巧:
在關機效果實現上,現在一般根據瀏覽器特征分別使用 慮鏡/樣式/圖片 去模擬。
其中Opera是不支持網頁透明的,只能用png的alpha透明模擬。
所以,我們需要一張特別的小圖片。一個象素,alpha透明。
但是這個單象素圖片的出現,感覺有點怪怪的,而且當網速很慢的時候,裝載這個小圖片還會延遲,效果不好。
不過,Opera的另外一個特性,可以避免這個問題:data:協議的支持。
對于這種小圖片,完全可以編碼到樣式里面
background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mM4ffp0AwAHqALiYeNxSgAAAABJRU5ErkJggg==)
好了,如此一來,關機效果的實現,就沒有圖片這個累贅了。
圖片的生成:
圖片的生成,浪費我一個中午的時間:(
開始本想找個軟件做掉,最后沒發現一個如意的,干脆,自己看看api,自己寫了一下:
代碼如下:
public static void main(String[] args) throws IOException {
BufferedImage image = new BufferedImage(1, 1,
BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = image.createGraphics();
// RGBA #cccccc80
g2d.setColor(new Color(0xcc, 0xcc, 0xcc, 0x80));
g2d.fillRect(0, 0, 1, 1);
g2d.dispose();
IIOImage iioImage = new IIOImage(image, null, null);
ImageTypeSpecifier type = ImageTypeSpecifier
.createFromRenderedImage(image);
ImageWriter writer = (ImageWriter) ImageIO.getImageWriters(type, "png")
.next();
ByteArrayOutputStream out = new ByteArrayOutputStream();
writer.setOutput(ImageIO.createImageOutputStream(out));
writer.write(null, iioImage, null);
BASE64Encoder encoder = new BASE64Encoder();
String result = encoder.encode(out.toByteArray()).replaceAll("[\r\n]",
"");
System.out.println("data:image/png;base64," + result);
}
需要其他顏色,自己修改一下代碼即是。
posted on 2007-05-18 15:30
金大為 閱讀(1302)
評論(1) 編輯 收藏