aardio 文档

aardio 范例: WebView2 - WebP 图像转 JPG 格式

//转换 WebP 图像
import fsys;
import process;
import win.ui;
/*DSG{{*/
var winform = win.form(text="WebView2 - WebP 图像转 JPG 格式";right=966;bottom=622)
winform.add(
btnCallJavaScript={cls="button";text="转换图像";left=615;top=537;right=869;bottom=606;color=0xD77800;db=1;dr=1;font=LOGFONT(h=-14);note="WebP 图像转 JPG 格式";z=2};
static={cls="static";left=8;top=6;right=956;bottom=503;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/

import web.view;
var wb = web.view(winform.static);

wb.external = {
    OnConvertCompleted = function(byteArray,savePath){
        //JS 数组转换为 buffer 
        var buf = raw.buffer({BYTE data[]=byteArray})

        //写入 buffer 到文件
        io.file.write(savePath,buf);

        import process.imageView;
        process.imageView(savePath);
    } 
}

wb.html = /**
<!DOCTYPE html><html>
<head><meta charset="utf-8" /></head>
<body>  
<canvas id="canvas" ></canvas>
<script> 

    let canvas = document.getElementById("canvas")

    window.convertImage = function(nativeBuffer,savePath){

        //wb.xcall 使用 JSON 转换数据,buffer 会转换为 {type:"Buffer",data:[...]} 格式的数据。
        const uint8Array = new Uint8Array(nativeBuffer.data);

        //自内存加载图像
        const blob = new Blob([uint8Array], { type: 'image/webp' });
        const imageUrl = URL.createObjectURL(blob);

        let img = new Image();
        img.src = imageUrl;
        img.onload =   function() {
            canvas.setAttribute("width", this.width);
            canvas.setAttribute("height", this.height);
            canvas.getContext("2d").drawImage(this, 0, 0);
            canvas.toBlob(async function(blob) { 

                //ArrayBuffer 转换为可以直接传值给 aardio 的普通 JS 数组。
                var bytes = Array.from( new Uint8Array(await blob.arrayBuffer()) ); 

                aardio.OnConvertCompleted(bytes,savePath)
            }, `image/jpeg`, 0.1)
        };
    } 

</script>

</body> 
**/

import fsys.dlg;
import inet.urlData;
winform.btnCallJavaScript.oncommand = function(id,event){
    var path = fsys.dlg.open("*.webp|*.webp||","请指定要转换的图像");
    if(!path) return;

    var buf = string.loadBuffer(path);
    wb.xcall("convertImage",buf,fsys.path.replaceExt(path,".jpg"));
}

/*
也可以这样转换:

import process.ffmpeg;
var ffmpeg = process.ffmpeg("/",
    "-y","-i","~/example/Graphics/.gdip.jpg","out.webp");
*/

winform.show();
win.loopMessage();
Markdown 格式