// µ¼Èë±ØÒªµÄAndroidºÍOpenCVÀà
importClass(android.graphics.Bitmap);
importClass(java.io.File);
importClass(org.opencv.core.Core);
importClass(org.opencv.core.Mat);
importClass(org.opencv.core.Size);
importClass(org.opencv.imgproc.Imgproc);
// È«ÆÁ½Øͼ
var img = screen.screenShotFull();
if (img.isNull()) {
printl("½Øͼʧ°Ü");
exit();
}
// ÔʼͼƬÐÅÏ¢
var originalPath = "/sdcard/original.jpg";
img.save(originalPath);
printl("ÔʼͼƬ³ß´ç£º" + img.getWidth() + "x" + img.getHeight());
printl("ÔʼÎļþ´óС£º" + (new File(originalPath).length()/1024).toFixed(2) + "KB");
// ·½·¨1£ºµ÷Õû·Ö±æÂÊѹËõ
function resizeCompress(imageObj, targetWidth) {
try {
var ratio = imageObj.getHeight() / imageObj.getWidth();
var targetHeight = Math.round(targetWidth * ratio);
var srcMat = imageObj.getMat().clone();
var dstMat = new Mat();
// ʹÓøü¸ßЧµÄ²åÖµËã·¨
Imgproc.resize(srcMat, dstMat,
new Size(targetWidth, targetHeight),
0, 0, Imgproc.INTER_AREA);
// ת»»»ØBitmap
var resultBitmap = Bitmap.createBitmap(
dstMat.cols(),
dstMat.rows(),
Bitmap.Config.RGB_565 // ʹÓøüÊ¡ÄÚ´æµÄÅäÖÃ
);
org.opencv.android.Utils.matToBitmap(dstMat, resultBitmap);
// ±£´æÎļþ
var outputPath = "/sdcard/resized_" + targetWidth + ".jpg";
var fos = new java.io.FileOutputStream(outputPath);
resultBitmap.compress(Bitmap.CompressFormat.JPEG, 85, fos);
fos.close();
// ×ÊÔ´»ØÊÕ
srcMat.release();
dstMat.release();
resultBitmap.recycle();
return outputPath;
} catch(e) {
printl("ѹËõ³ö´í£º" + e.message);
return null;
}
}
// ·½·¨2£ºÖÊÁ¿Ñ¹Ëõ
function qualityCompress(imageObj, quality) {
try {
var outputPath = "/sdcard/quality_" + quality + ".jpg";
var bitmap = imageObj.getBitmap();
var fos = new java.io.FileOutputStream(outputPath);
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, fos);
fos.close();
bitmap.recycle();
return outputPath;
} catch(e) {
printl("ÖÊÁ¿Ñ¹Ëõʧ°Ü£º" + e.message);
return null;
}
}
// Ö´ÐÐѹËõ
var resizedPath = resizeCompress(img, 640);
var qualityPath = qualityCompress(img, 70);
// ÏÔʾѹËõ½á¹û
function showCompressInfo(path) {
if (!path) return;
var file = new File(path);
if (file.exists()) {
printl("ѹËõÎļþ£º" + path);
printl("ѹËõºó³ß´ç£º" +
img.getWidth()*(640/img.getWidth()) + "x" +
img.getHeight()*(640/img.getWidth()));
printl("ѹËõºó´óС£º" + (file.length()/1024).toFixed(2) + "KB");
}
}
showCompressInfo(resizedPath);
showCompressInfo(qualityPath);
// ×ÊÔ´»ØÊÕ
img.recycle();
Ö÷Òª°üº¬Á½ÖÖѹËõ·½Ê½£º·Ö±æÂÊѹËõºÍÖÊÁ¿Ñ¹Ëõ¡£ÒÔÏÂÊÇ´úÂëµÄÏêϸ½âÊÍ£º
----- »ù´¡×¼±¸ -----
- Àà¿âµ¼È룺
- µ¼ÈëAndroidͼÐÎÀࣨBitmap£©¡¢Îļþ²Ù×÷Àà
- µ¼ÈëOpenCVºËÐÄ¿âºÍͼÏñ´¦ÀíÀà
- ʹÓÃÆÁÄ»½ØͼÐèÒªAuto.jsµÄscreen¶ÔÏó
- È«ÆÁ½Øͼ£º
var img = screen.screenShotFull(); // »ñÈ¡È«ÆÁ½Øͼ
img.save(originalPath); // ±£´æÔʼͼƬ
----- ºËÐÄ·½·¨ -----
- ·Ö±æÂÊѹËõ·½·¨£¨resizeCompress£©£º
- °´±ÈÀýËõС³ß´ç£º±£³Ö¿í¸ß±È¼ÆËãÄ¿±ê¸ß¶È
- ʹÓÃOpenCVµÄINTER_AREAËã·¨£¨ÊʺÏËõСͼÏñµÄ²åÖµËã·¨£©
- ת»»BitmapʱʹÓÃRGB_565ÅäÖ㨱ÈĬÈÏARGB_8888½ÚÊ¡50%Äڴ棩
- ±£´æÖÊÁ¿Îª85µÄJPEGÎļþ
- ÖÊÁ¿Ñ¹Ëõ·½·¨£¨qualityCompress£©£º
- Ö±½Óµ÷ÕûJPEGѹËõÖÊÁ¿£¨0-100·¶Î§£¬ÖµÔ½Ð¡Ñ¹Ëõ±ÈÔ½¸ß£©
- ²»¸Ä±äͼƬ³ß´ç£¬½ö½µµÍÎļþÖÊÁ¿
----- Ö´ÐÐÁ÷³Ì -----
- Ôʼ½Øͼ±£´æ
- ´æ´¢Â·¾¶£º/sdcard/original.jpg
- Êä³öÔʼ·Ö±æÂÊ£¨Èç1080x2340£©ºÍÎļþ´óС£¨Èç800KB£©
- Ö´ÐÐÁ½ÖÖѹËõ£º
- ·Ö±æÂÊѹËõµ½640px¿í¶È£¨Éú³É/sdcard/resized_640.jpg£©
- ÖÊÁ¿Ñ¹Ëõµ½70%£¨Éú³É/sdcard/quality_70.jpg£©
- ѹËõ½á¹ûÊä³ö£º
- ÏÔʾѹËõºó³ß´ç£¨×¢Òâ´Ë´¦´úÂë´æÔÚ¼ÆËã´íÎó£¬Êµ¼Ê¸ß¶ÈӦΪ640*Ôͼ¸ß¿í±È£©
- ÏÔʾѹËõºóÎļþ´óС£¨µ¥Î»KB£©
----- ÓÅ»¯Ï¸½Ú -----
- ×ÊÔ´¹ÜÀí£º
srcMat.release(); // ÊÍ·ÅOpenCV¾ØÕóÄÚ´æ
resultBitmap.recycle(); // »ØÊÕBitmap×ÊÔ´
- ´íÎó´¦Àí£º
- ʹÓÃtry-catch²¶»ñÒì³£
- ½Øͼʧ°Üʱ×Ô¶¯Í˳ö½Å±¾
----- DZÔÚÎÊÌâ -----
- ³ß´ç¼ÆËãÎó²î£º µ±Ç°´úÂëÖÐ
img.getWidth()*(640/img.getWidth())
ʵ¼ÊµÈÓÚ640£¬¸ß¶È¼ÆËãδÕýȷʵÏÖ£¬Ó¦¸ÄΪ£º
"ѹËõºó³ß´ç£º" + targetWidth + "x" + targetHeight
- OpenCV³õʼ»¯£º ʵ¼ÊʹÓÃÖпÉÄÜÐèÒªÏȳõʼ»¯OpenCV¿â£º
if (!org.opencv.android.OpenCVLoader.initDebug()) {
printl("OpenCV³õʼ»¯Ê§°Ü");
}
- ·¾¶¼æÈÝÐÔ£º Ó²±àÂë·¾¶£¨/sdcard/£©¿ÉÄܲ»ÊÊÓÃÓÚа汾Android£¬½¨Òé¸ÄÓû·¾³±äÁ¿£º
var externalDir = context.getExternalFilesDir(null).getAbsolutePath();
Õâ¸ö½Å±¾ÊÊÓÃÓÚÐèÒª×Ô¶¯»¯´¦ÀíÊÖ»ú½ØͼµÄ³¡¾°£¨ÈçAPP²âÊÔ½ØͼÉÏ´«£©£¬Í¨¹ýÁ½ÖÖѹËõ·½Ê½µÄ×éºÏʹÓ㬿ÉÒÔÔÚÇåÎú¶ÈºÍÎļþ´óС֮¼äÈ¡µÃƽºâ¡£
ÁíÍ⣺
ÓеÄҪȡÊÖ»úµã»÷»òÊÇÍ϶¯ÑéÖ¤ÂëµÄ£¬¾ÍÌرð¼òµ¥ÁË£¬ÓÃÈí¼þµÄ¼ôÇÐͼƬ¹¦ÄÜ¡£ÓеĿͻ§ÏëʵÏְѽصÄͼƬ·Ö±æÂÊÊÇ 720*345£¬±ä³É378*314 £¬Êµ¼Ê¾ÍÊDzüôÑéÖ¤ÂëͼƬµÄÒâ˼¡£
È«ÆÁ½Øͼ£¬È»ºó°ÑÑéÖ¤Âë²Ã¼ô½Øͼ³öÀ´
var img = screen.screenShotFull();
var url = img.cutImagePercent(0, 0.2, 1, 0.62);
printl(url);