2011年12月26日

Java BufferedImage Low Quality 解決方法


Java中常常使用java.awt.Image庫所提供的方法進行圖像的縮放、及裁切。我們可以使用Graphics2D g = image.createGraphics()的方式得到Graphics物件,並且可以對其繪製圖案上去,但是縮放圖片時,若直接使用draw方法繪製會產生極大的問題,如題Qualtiy降低的問題,在這裡我也提供了解決的方案與原始程式碼的比照。

低畫質的縮圖程式碼
if (imgtype == BufferedImage.TYPE_BYTE_INDEXED || imgtype == BufferedImage.TYPE_BYTE_BINARY) {
     IndexColorModel icm = (IndexColorModel) source.getColorModel();
     image = new BufferedImage(width, height, imgtype, icm);

} else {
     image = new BufferedImage(width, height, imgtype);
}
Graphics g = image.getGraphics();
g.drawImage(source, 0, 0, width, height, null);

Smooth解法程式碼
ColorModel dstCM = source.getColorModel();
image = new BufferedImage(dstCM, dstCM.createCompatibleWritableRaster(width, height),
         dstCM.isAlphaPremultiplied(), null);

Image scaleImage = source.getScaledInstance(width, height, Image.SCALE_SMOOTH);
Graphics2D g = image.createGraphics();
g.drawImage(scaleImage, 0, 0, width, height, null);

縮圖品質比較 :



總表比較 :
總類
畫質
檔案大小
低畫質縮圖
7.84kb
Smooth解法
7.84kb


由此可以下個結論,直接使用draw繪圖不僅得到低畫質的圖片,也無法得到較低的檔案大小,所以以後使用縮圖就要使用Smooth解法來解。

2011年12月15日

[剪貼]取得TinyMce中的所有img標籤


var srcs = new Array();

// 取得tinyMce內容
var editContent = $('#elm1').html();

// 取得全部的img標籤
var imgs = $(editContent).find('img');


// 去重複
imgs.each(function(index){
srcs[index] = $(this).attr('src');
});

function removeRepeat(a) {
var b = [], n = a.length, i, j;
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++)
if (a[i] === a[j]){j=false;break;}
if(j)b.push(a[i]);
}
//console.info((new Date).getTime()-a1)  
return b.sort(function(a,b){return a-b});
}

srcs = removeRepeat(srcs);

2011年12月6日

jQuery事件縮寫



n   blur
n   change
n   click
n   dblclick
n   error
n   focus
n   keydown
n   keypress
n   keyup
n   load
n   mousedown
n   mousemove
n   mouseout
n   mouseover
n   mouseup
n   resize
n   scroll
n   select
n   submit
n   unload

2011年12月5日

TextLayoutFramework 簡單測試



TextLayoutFramework是Flex上一功能齊全的文字編輯器。
它比RichTextEditor的功能還要齊全,可以顯示使用者電腦上的字體,排版等。


// 宣告一個TextArea對象                   
var textarea:TextArea = new TextArea();
textarea.editable = false;
textarea.percentHeight = 100;
textarea.percentWidth = 100;
                      
// TextLayout Framework編輯出來的字串
var string:String = "<flow:TextFlow direction='ltr' blockProgression='tb' whiteSpaceCollapse='preserve' xmlns:flow='http://ns.adobe.com/textLayout/2008'><flow:p><flow:span fontSize='48' fontFamily='文泉驛微米黑'><flow:tab/>測試</flow:span></flow:p><flow:p><flow:span fontSize='48' fontFamily='文泉驛微米黑'></flow:span></flow:p><flow:p><flow:span fontSize='48' fontFamily='文泉驛微米黑'></flow:span></flow:p><flow:p textAlign='center'><flow:span fontSize='48' fontFamily='華康巧風體W1'></flow:span><flow:span fontSize='48' fontFamily='Mixed'></flow:span></flow:p><flow:p><flow:span fontSize='48' fontFamily='華康巧風體W1'></flow:span></flow:p><flow:p><flow:span fontSize='48' fontFamily='文泉驛微米黑'></flow:span></flow:p><flow:p><flow:span fontSize='48' fontFamily='文泉驛微米黑'></flow:span></flow:p></flow:TextFlow>";
                      
// 宣告一個TextFlow對象
var textflow:TextFlow = new TextFlow();
textflow = TextFlowUtil.importFromString(string, WhiteSpaceCollapse.PRESERVE);
                      
// TextFlow對象設定給TextArea
textarea.textFlow = textflow;




預覽圖片 :

ShareThis