Android把svg圖片轉(zhuǎn)為jpg保存到相冊(cè)圖庫(kù)
我上一篇文章寫了《Android加載html中的svg格式圖片進(jìn)行顯示〉,有興趣的同學(xué)可以去看看地址:Android加載html中svg格式圖片進(jìn)行顯示
但是我們一般在瀏覽圖片時(shí),還會(huì)有保存圖片到相冊(cè)或圖庫(kù)的操作,而Android手機(jī)自帶的相冊(cè)或圖庫(kù)是不支持查看svg格式的圖片的,所以我們需要把svg格式的圖片轉(zhuǎn)為jpg或png格式再進(jìn)行保存,我的例子是保存為jpg格式,png也是一樣的,我這里寫了個(gè)工具類,可以保存jpg,png格式的圖片,也可以把svg圖片轉(zhuǎn)為jpg進(jìn)行保存.接下來(lái)我貼下我的代碼:
public class FileUtils {
public static void savePhoto(final Context context, final String url , final SaveResultCallback saveResultCallback) {
new Thread(new Runnable() {
@Override
public void run() {
File appDir = new File(Environment.getExternalStorageDirectory(), "out_photo");
if (!appDir.exists()) {
appDir.mkdir();
}
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");//設(shè)置以當(dāng)前時(shí)間格式為圖片名稱
String fileName = df.format(new Date()) + ".jpg";
File file = new File(appDir, fileName);
if (url.endsWith(".svg")){
//拿到圖片在assets目錄下的相對(duì)路徑
String replaceUrl = url.replace("file:///android_asset/", "");
try {
SVG svg = new SVGBuilder().readFromAsset(context.getAssets(), replaceUrl).build();
//拿到svg圖片的drawable
PictureDrawable drawable = svg.getDrawable();
//圖片背景的畫筆
Paint paint = new Paint();
paint.setColor(Color.WHITE);
//圖片線條的畫筆
Paint paint1 = new Paint();
paint1.setColor(Color.BLACK);
//創(chuàng)建bitmap對(duì)象
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawRect(0,0,bitmap.getWidth()+50,bitmap.getHeight()+50,paint);
drawable.setBounds(0,0,canvas.getWidth(),canvas.getHeight());
drawable.draw(canvas);
FileOutputStream fos = new FileOutputStream(file);
//轉(zhuǎn)為jpg格式并寫入到sd卡
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
saveResultCallback.onSavedSuccess();
} catch (IOException e) {
e.printStackTrace();
saveResultCallback.onSavedFailed();
}
}else {
try {
//保存jpg格式的圖片到相冊(cè)中
FileOutputStream fos = new FileOutputStream(file);
InputStream fis = context.getAssets().open(url.replace("file:///android_asset/",""));
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes)) != -1){
fos.write(bytes,0,len);
}
fos.flush();
fis.close();
fos.close();
saveResultCallback.onSavedSuccess();
} catch (FileNotFoundException e) {
saveResultCallback.onSavedFailed();
e.printStackTrace();
} catch (IOException e) {
saveResultCallback.onSavedFailed();
e.printStackTrace();
}
}
//保存圖片后發(fā)送廣播通知更新數(shù)據(jù)庫(kù)
Uri uri = Uri.fromFile(file);
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
}
}).start();
}
public interface SaveResultCallback{
void onSavedSuccess();
void onSavedFailed();
}
}
用到的第三方開源庫(kù):https://github.com/japgolly/svg-android
效果圖:


歡迎大家進(jìn)行交流,指正!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 基于Android實(shí)現(xiàn)保存圖片到本地并可以在相冊(cè)中顯示出來(lái)
- android創(chuàng)建數(shù)據(jù)庫(kù)(SQLite)保存圖片示例
- Android實(shí)現(xiàn)保存圖片到本地并在相冊(cè)中顯示
- Android畫圖并保存圖片的具體實(shí)現(xiàn)代碼
- Android實(shí)現(xiàn)點(diǎn)擊WebView界面中圖片滑動(dòng)瀏覽與保存圖片功能
- Android WebView實(shí)現(xiàn)長(zhǎng)按保存圖片及長(zhǎng)按識(shí)別二維碼功能
- Android編程實(shí)現(xiàn)保存圖片到系統(tǒng)圖庫(kù)的方法示例
- Android實(shí)現(xiàn)長(zhǎng)按圖片保存至相冊(cè)功能
- Android開發(fā)實(shí)現(xiàn)保存圖片到手機(jī)相冊(cè)功能
相關(guān)文章
Android填坑系列:在小米系列等機(jī)型上放開定位權(quán)限后的定位請(qǐng)求彈框示例
本文詳細(xì)介紹了在小米系列等機(jī)型上放開定位權(quán)限后的定位請(qǐng)求彈框示例,例如在應(yīng)用軟件中提示顯示定位服務(wù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11
Android?Service完整實(shí)現(xiàn)流程分析
Android的服務(wù)是開發(fā)Android應(yīng)用程序的重要組成部分。不同于活動(dòng)Activity,服務(wù)是在后臺(tái)運(yùn)行,服務(wù)沒(méi)有接口,生命周期也與活動(dòng)Activity非常不同。通過(guò)使用服務(wù)我們可以實(shí)現(xiàn)一些后臺(tái)操作,比如想從遠(yuǎn)程服務(wù)器加載一個(gè)網(wǎng)頁(yè)等,下面來(lái)看看詳細(xì)內(nèi)容,需要的朋友可以參考下2023-01-01
Android中的windowSoftInputMode屬性詳解
詳解Android中ViewPager的PagerTabStrip子控件的用法
Android7.0 MTK設(shè)置默認(rèn)桌面
Android MotionEvent中g(shù)etX()和getRawX()的區(qū)別實(shí)例詳解

