package Ġcom . lx h . cook community . util Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . os . Environment Ċ import Ġandroidx . ex if interface . media . Ex if Interface Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException ĊĊ Ċ fun Ġbytes To Image File ( bytes : ĠByteArray ): ĠFile ? Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( Environment . get External Storage Directory (). absolute Path Ġ+ Ġ"/ ${ System . currentTimeMillis ()}. jpeg "); ĊĠĠĠĠĠĠĠ Ġval Ġf os Ġ= ĠFileOutputStream ( file ) ĊĠĠĠĠĠĠĠ Ġf os . write ( bytes , Ġ 0 , Ġbytes . size ) ĊĠĠĠĠĠĠĠ Ġf os . flush () ĊĠĠĠĠĠĠĠ Ġf os . close () ĊĠĠĠĠĠĠĠ Ġfile ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ åĽ¾çīĩ åİĭç¼© - è´¨ éĩı åİĭç¼© Ċ Ġ* Ċ Ġ* Ġ@ param ĠfilePath Ġæ º Ĳ åĽ¾çīĩ è·¯å¾Ħ Ċ Ġ* Ġ@ return Ġ åİĭç¼© åĲİçļĦ è·¯å¾Ħ Ċ Ġ*/ Ċ fun Ġcompress Image ( old File : ĠFile ?): ĠFile ? Ġ{ ĊĊĠĠĠ Ġ// åİĭç¼© æĸĩä»¶ è·¯å¾Ħ Ġ çħ§ çīĩ è·¯å¾Ħ / ĊĠĠĠ Ġval Ġtarget Path Ġ= Ġold File ?. path ĊĠĠĠ Ġval Ġquality Ġ= Ġ 5 0 Ġ// åİĭç¼© æ¯Ķ ä¾ĭ 0 - 1 0 0 ĊĠĠĠ Ġvar Ġbm : ĠBitmap ? Ġ= Ġget Small Bitmap ( old File ?. path ) Ġ// èİ·åıĸ ä¸Ģå®ļ å° º å¯ ¸ çļĦ åĽ¾çīĩ ĊĠĠĠ Ġval Ġdegree Ġ= Ġget Rotate Angle ( old File ?. path ) Ġ// èİ·åıĸ çĽ¸ çīĩ æĭ į æĳ Ħ è§Ĵ åº¦ ĊĠĠĠ Ġif Ġ( degree Ġ!= Ġ 0 ) Ġ{ Ġ// æĹ ĭ è½¬ çħ§ çīĩ è§Ĵ åº¦ ï¼Į éĺ² æŃ¢ å¤´ åĥı æ¨ ª çĿĢ æĺ¾ç¤º ĊĠĠĠĠĠĠĠ Ġbm Ġ= Ġset Rotate Angle ( degree , Ġbm ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval ĠoutputFile Ġ= ĠFile ( target Path ) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! outputFile . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputFile . parent File . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// outputFile . createNew File (); ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputFile . delete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠFileOutputStream ( outputFile ) ĊĠĠĠĠĠĠĠ Ġbm !!. compress ( Bitmap . Compress Format . JPEG , Ġquality , Ġout ) ĊĠĠĠĠĠĠĠ Ġout . close () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġreturn Ġold File ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠoutputFile Ċ } Ċ Ċ /** Ċ Ġ* Ġèİ·åıĸ åĽ¾çīĩ çļĦ æĹ ĭ è½¬ è§Ĵ åº¦ Ċ Ġ* Ċ Ġ* Ġ@ param ĠfilePath Ċ Ġ* Ġ@ return Ċ Ġ*/ Ċ fun Ġget Rotate Angle ( filePath : ĠString ?): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġrotate _ angle Ġ= Ġ 0 ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġex if Interface Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface ( filePath !! ) ĊĠĠĠĠĠĠĠ Ġval Ġorientation Ġ= Ġex if Interface . getAttribute Int ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . TAG _ OR IENTATION , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ NORMAL ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 9 0 Ġ-> Ġrotate _ angle Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 9 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 1 8 0 Ġ-> Ġrotate _ angle Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 8 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 2 7 0 Ġ-> Ġrotate _ angle Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 7 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġrotate _ angle Ċ } Ċ Ċ /** Ċ Ġ* Ġ æĹ ĭ è½¬ åĽ¾çīĩ è§Ĵ åº¦ Ċ Ġ* Ċ Ġ* Ġ@ param Ġangle Ċ Ġ* Ġ@ param Ġbitmap Ċ Ġ* Ġ@ return Ċ Ġ*/ Ċ fun Ġset Rotate Angle ( angle : ĠInt , Ġbitmap : ĠBitmap ?): ĠBitmap ? Ġ{ ĊĠĠĠ Ġvar Ġbitmap Ġ= Ġbitmap ĊĠĠĠ Ġif Ġ( bitmap Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġm . post Rotate ( angle . toFloat ()) ĊĠĠĠĠĠĠĠ Ġbitmap Ġ= ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap , Ġ 0 , Ġ 0 , Ġbitmap . width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . height , Ġm , Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġbitmap Ċ } Ċ Ċ /** Ċ Ġ* Ġæł¹æį® è·¯å¾Ħ èİ·å¾Ĺ åĽ¾çīĩ ä¿¡æģ¯ å¹¶ æĮī æ¯Ķ ä¾ĭ åİĭç¼© ï¼Į è¿ĶåĽŀ bitmap Ċ Ġ*/ Ċ fun Ġget Small Bitmap ( filePath : ĠString ?): ĠBitmap Ġ{ ĊĠĠĠ Ġval Ġoptions Ġ= ĠBitmap Factory . Options () ĊĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġtrue Ġ// åıª è§£æŀĲ åĽ¾çīĩ è¾¹ æ² ¿ ï¼Į èİ·åıĸ å®½ é«ĺ ĊĠĠĠ ĠBitmap Factory . decode File ( filePath , Ġoptions ) ĊĠĠĠ Ġ// Ġ è®¡ç®Ĺ ç¼© æĶ¾ æ¯Ķ ĊĠĠĠ Ġoptions . in Sample Size Ġ= Ġcalculate In Sample Size ( options , Ġ 4 8 0 , Ġ 8 0 0 ) ĊĠĠĠ Ġ// Ġ å®Įæķ´ è§£æŀĲ åĽ¾çīĩ è¿ĶåĽŀ bitmap ĊĠĠĠ Ġoptions . in Just Decode Bounds Ġ= Ġfalse ĊĠĠĠ Ġreturn ĠBitmap Factory . decode File ( filePath , Ġoptions ) Ċ } Ċ Ċ fun Ġcalculate In Sample Size ( ĊĠĠĠ Ġoptions : ĠBitmap Factory . Options , ĊĠĠĠ Ġreq Width : ĠInt , Ġreq Height : ĠInt Ċ ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġheight Ġ= Ġoptions . out Height ĊĠĠĠ Ġval Ġwidth Ġ= Ġoptions . out Width ĊĠĠĠ Ġvar Ġin Sample Size Ġ= Ġ 1 ĊĠĠĠ Ġif Ġ( height Ġ> Ġreq Height Ġ|| Ġwidth Ġ> Ġreq Width ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheight Ratio Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMath . round ( height . toFloat () Ġ/ Ġreq Height . toFloat ()) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ratio Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMath . round ( width . toFloat () Ġ/ Ġreq Width . toFloat ()) ĊĠĠĠĠĠĠĠ Ġin Sample Size Ġ= Ġif Ġ( height Ratio Ġ< Ġwidth Ratio ) Ġheight Ratio Ġelse Ġwidth Ratio ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġin Sample Size Ċ }