当前位置: 首页 > Web前端 > HTML

RustWasmImagetoASCIIArt

时间:2023-03-27 22:56:51 HTML

鍦ㄤ唬鐮佷腑闅愯棌浜嗕竴浜涙湁瓒g殑ASCII鍥惧儚锛屼緥濡傦細/*__ooOoo_o8888888o88"."88(|-_-|)O\=/O____/`---'\____.'\\||//`銆?\\|||:|||//\/_|||||-:-|||||_\||\\\-/'||||\_|`\`---'//|_/|\.-\__`-.-'__/-銆?___`銆?'/--.--\`銆?'___.""'<`.___\_<|>_/___.'_>\""銆倈|锛歚-\`銆傦紱`銆俖/;.'//.';|\\`-銆俓_\_`銆俖.'_/_/-'_.'/==================-.`___`-.__\\___/__.-'_.'_.-'==================`=--=-'浣涚淇濅綉锛屾案涓峛ug锛屾案涓嶅畷鏈?/鍙互灏嗕竴浜涙湁瓒g殑鍥剧墖杞崲鎴怉SCII鑹烘湳鍥剧墖锛屽祵鍏ュ埌浠g爜涓紝鎴栬€呮棩蹇椾腑鐨勬暣浣撳師鐞嗘瘮杈冪畝鍗曪紝杩欓噷鎴戜滑浣跨敤RustWasm鏉ュ疄鐜般€?.鍘熺悊鍏堢畝鍗曡涓€涓嬪師鐞嗐€傚皢RGB鍥惧儚杞崲涓虹伆搴﹀浘鍍忋€傚噯澶囦竴浜涗笉鍚屽瘑搴︾殑ASCII瀛楃銆傞亶鍘嗙伆搴﹀浘鍍忓儚绱狅紝鏍规嵁浜害鍊兼浛鎹㈠搴旂殑ASCII瀛楃銆傝繖閲屼富瑕佽涓€涓嬬伆搴﹀鐞嗚繃绋嬨€?.1鐏板害澶勭悊鐏板害鍥惧儚鍜屽僵鑹插浘鍍忕殑鍖哄埆鏄疪=G=B銆傚叧浜庣伆搴﹀€肩殑璁$畻锛屼富娴佺殑鏂规硶鏈?绉嶏細鏈€澶у€兼硶锛歁ax(R,G,B)銆傚钩鍧囨硶锛?R+G+B)/3.鍔犳潈骞冲潎娉曪細0.2126*R+0.7152*G+0.0722*B0.299*R+0.587*G+0.114*BMath.sqrt((0.299*R)**2+(0.587*G)**2+(0.114*B)**2)鏁堟灉濡備笅鍥撅紙demo鍦板潃锛夛細杩欓噷浣跨敤浜哛ust涓姞鏉冨钩鍧囩殑绗竴绉嶆柟娉曪細pubfnget_luminance(r:u8,g:u8,b:u8)->f32{璁﹔=0.2126*(rasf32);璁ゞ=0.7152*(g浣滀负f32);璁゜=0.0722*(b浣滀负f32);r+g+b}2.RustImage鐨勪竴浜涘鐞嗕笅闈㈡槸涓€浜涢渶瑕佹敞鎰忕殑鍦版柟銆?.1JS鍒癛ust鐨勬枃浠朵紶杈撻渶瑕佽浆鎹㈡垚Uint8Array杩涜浼犺緭锛歝onstfile=e.target.files[0];constreader=newFileReader();reader.onloadend=(evt)=>{try{constu8buffer=newUint8Array(evt.target.result);constresult=get_rust_image(u8buffer);}catch(error){console.log({error});}};file&&reader.readAsArrayBuffer(file);澶勭悊锛?[wasm_bindgen]pubfnget_rust_image(raw:Vec){...}2.2Rust杞琂SVec浼犻€扲ust閮ㄥ垎鍙渶瑕佷紶閫扸ec:#[wasm_bindgen]pubfnget_rust_image(raw:Vec)->Vec{...}JS娑堣垂鍙互鏍规嵁Uint8Array澶勭悊锛?/toBlobconstblob=newBlob([u8buffer.buffer]);//toFileconstfile=newFile([blob],'image.unknown');//鍒癠RLconsturl=URL.createObjectURL(blob);2.3RustImageCrate杈撳嚭鍥剧墖鏁版嵁ImageCrate鍔犺浇鍥剧墖鍚庯紝榛樿杈撳嚭瀛楄妭涓篈瑙g爜鍚庣殑鍘熷鏁版嵁浼犵粰JS鍚庢棤娉曟甯镐娇鐢紝闇€瑕佸鍘熷鏁版嵁杩涜缂栫爜鍚庤緭鍑恒€?/缁欑紪鐮佸櫒涓€涓唴瀛樼┖闂存潵鍐欏叆鏁版嵁letmutoutput_buffer=vec![];//鍒涘缓涓€涓紪鐮佸櫒letmutencoder=JpegEncoder::new_with_quality(&mutoutput_buffer,100);//缂栫爜杈撳嚭encoder.encode(&img_raw,width,height,ColorType::L8).unwrap();//鐩存帴杈撳嚭鍐呭瓨output_buffer3.杩欓噷鏈変袱涓増鏈€?.1绠€鍖栫増瀹炵幇杩欎釜姣旇緝绠€鍗曪紝鍘绘帀棰滆壊锛屽尮閰嶏紝鐒跺悗杩炴帴鍗冲彲锛?[wasm_bindgen]pubfnget_ascii_by_image(raw:Vec,scale:u32,reverse:bool)->String{璁﹊mg=load_from_memory(&raw).unwrap();璁﹊mg=img.resize((img.width()*scale/100)asu32,(img.height()*scale/100)asu32,FilterType::Nearest,)銆傜伆搴︼紙锛夛紱letmutpallete=['','.','\\','*','#','$','@'];璁﹎utcurrent_line=0;璁﹎utresult="".to_string();濡傛灉鍙嶈浆{pallet.reverse();}for(_,line,rgba)inimg.pixels(){ifcurrent_line!=line{result.push('\n');褰撳墠琛?琛岋紱}璁﹔=0.2126*(rgba.0[0]浣滀负f32);璁ゞ=0.7152*(rgba.0[0]浣滀负f32);璁゜=0.0722*(rgba.0[0]浣滀负f32);璁╃伆鑹?r+g+b;璁ヽaracter=((gray/255.0)*(pallete.len()-1)asf32).round()asusize;缁撴灉.push锛堟墭鐩榌瀛楃]锛夛紱//濉厖瀹冿紝涓€浜涘钩鍧︾殑ifcaracter<(pallete.len()-2){result.push('.');}else{result.push('');}}result}婕旂ず鍦板潃鐨勬墽琛屾椂闂寸害涓?0ms銆傚湪3.2Tai鐗堟湰涓紝鐪嬪埌涓€涓敮鎸佸绉岮SCII绫诲瀷鐨凴ust椤圭洰https://github.com/MustafaSal...锛屼簬鏄慨鏀逛簡杩欎釜椤圭洰鐨処O閮ㄥ垎锛屼互閫傚簲WASM鎵ц鐨勭紪璇戣繃绋嬨€傛紨绀哄湴鍧€澶х害闇€瑕?0ms銆?.瀹夎骞朵娇鐢╥nitWasm().then(()=>{});鍙互鐩存帴浣跨敤浠撳簱涓璸kg/鐩綍涓嬬殑鏂囦欢锛屾垨鑰呬娇鐢╱pkghttps://unpkg.com/browse/rust鐨勮祫婧愩€?.锛屾垨浣跨敤npminstallrust-wasm-image-ascii銆傛帴鍙h鏄庡弬鑰冭繖閲岋細pkg/rust_wasm_image_ascii.d.ts馃専Github浠g爜鍦板潃锛歨ttps://github.com/lecepin/rust-wasm-image-ascii馃専Github鍘熷湴鍧€