Android圖片添加水印圖片并把圖片保存到文件存儲(chǔ)的實(shí)現(xiàn)代碼
具體代碼如下所示:
package zhangphil.test;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class JavaActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.drawable_activity);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
add();
}
});
}
private void add() {
new Thread(new Runnable() {
@Override
public void run() {
File zhang = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "zhang.jpg");
try {
//原圖片。
Bitmap bitmap1 = BitmapFactory.decodeStream(new FileInputStream(zhang));
//水印圖。
Bitmap bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.logo);
//原圖片添加水印后形成新的文件。
File zhangphil = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "zhangphil.jpg");
if (!zhangphil.exists())
zhangphil.createNewFile();
//原圖片添加水印后形成的新Bitmap。在原圖片的最左邊和做頂部開始添加。
//如果是中間或者底部需要計(jì)算x,y的坐標(biāo)位置。
Bitmap newbitmap = addImageWatermark(bitmap1, bitmap2, 0, 0);
//把添加水印后的Bitmap保存到文件。
save(newbitmap, zhangphil, Bitmap.CompressFormat.JPEG, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
/**
* 添加圖片水印。
*
* @param src 源圖片
* @param watermark 圖片水印
* @param x 起始坐標(biāo)x
* @param y 起始坐標(biāo)y
* @return 帶有圖片水印的圖片
*/
public static Bitmap addImageWatermark(Bitmap src, Bitmap watermark, int x, int y) {
Bitmap retBmp = src.copy(src.getConfig(), true);
Canvas canvas = new Canvas(retBmp);
canvas.drawBitmap(watermark, x, y, null);
return retBmp;
}
/**
* 保存圖片到文件File。
*
* @param src 源圖片
* @param file 要保存到的文件
* @param format 格式
* @param recycle 是否回收
* @return true 成功 false 失敗
*/
public static boolean save(Bitmap src, File file, Bitmap.CompressFormat format, boolean recycle) {
if (isEmptyBitmap(src))
return false;
OutputStream os;
boolean ret = false;
try {
os = new BufferedOutputStream(new FileOutputStream(file));
ret = src.compress(format, 100, os);
if (recycle && !src.isRecycled())
src.recycle();
} catch (IOException e) {
e.printStackTrace();
}
return ret;
}
/**
* Bitmap對(duì)象是否為空。
*/
public static boolean isEmptyBitmap(Bitmap src) {
return src == null || src.getWidth() == 0 || src.getHeight() == 0;
}
}
事先需要先放好源圖片Pictures/zhang.jpg和水印圖片res/drawable/logo.jpg。
權(quán)限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
總結(jié)
以上所述是小編給大家介紹的Android圖片添加水印圖片并把圖片保存到文件存儲(chǔ)的實(shí)現(xiàn)代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
深入Android HandlerThread 使用及其源碼完全解析
這篇文章主要介紹了深入Android HandlerThread 使用及其源碼完全解析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Flutter應(yīng)用程序?qū)崿F(xiàn)隱私屏幕示例解析
這篇文章主要為大家介紹了Flutter應(yīng)用程序?qū)崿F(xiàn)隱私屏幕示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
Android應(yīng)用開發(fā)中模擬按下HOME鍵的效果(實(shí)現(xiàn)代碼)
Android應(yīng)用開發(fā)中, 有一種場(chǎng)景,就是我們不希望用戶直接按Back鍵退出Activity,而是希望應(yīng)用隱藏到后臺(tái),類似于按Home鍵的效果2013-05-05
關(guān)于Android實(shí)現(xiàn)簡(jiǎn)單的微信朋友圈分享功能
這篇文章主要介紹了關(guān)于Android實(shí)現(xiàn)簡(jiǎn)單的微信朋友圈分享功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下2017-02-02
Android中Textview和圖片同行顯示(文字超出用省略號(hào),圖片自動(dòng)靠右邊)
Android中Textview和圖片同行顯示,文字超出用省略號(hào)顯示,圖片自動(dòng)靠右邊??吹竭@個(gè)問(wèn)題本來(lái)認(rèn)為是一個(gè)很正常的需求,看起來(lái)很簡(jiǎn)單,但是做起來(lái)卻遇到了很蛋疼的問(wèn)題,怎么搞的都不行,堵了很長(zhǎng)時(shí)間,下面說(shuō)一下解決的方案,希望遇到這樣問(wèn)題的朋友可以使用。2016-12-12
Android開發(fā)實(shí)現(xiàn)文件關(guān)聯(lián)方法介紹
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)文件關(guān)聯(lián)方法介紹,具有一定參考價(jià)值,需要的朋友樂(lè)意了解下。2017-10-10
android 檢查網(wǎng)絡(luò)連接狀態(tài)實(shí)現(xiàn)步驟
android 如何檢查網(wǎng)絡(luò)連接狀態(tài),是android開發(fā)中一個(gè)常見(jiàn)的問(wèn)題,本文將介紹如何實(shí)現(xiàn),需要的朋友可以參考下2012-12-12
Android用注解與反射實(shí)現(xiàn)Butterknife功能
Butterknife是一個(gè)在android上實(shí)現(xiàn)ioc(控制反轉(zhuǎn))的一個(gè)庫(kù)。ioc的核心是解耦。解耦的目的是修改耦合對(duì)象時(shí)不影響另外一個(gè)對(duì)象,降低模塊之間的關(guān)聯(lián)。在Spring中ioc更多的是依靠xml的配置。而android上的IOC框架可以不使用xml配置2022-11-11
Android ConstraintLayout約束布局使用實(shí)例介紹
ConstraintLayout是Google在Google I/O 2016大會(huì)上發(fā)布的一種新的布局容器(ViewGroup),它支持以靈活的方式來(lái)放置子控件和調(diào)整子控件的大小,下面這篇文章主要給大家介紹了關(guān)于Android中ConstraintLayout約束布局詳細(xì)解析的相關(guān)資料,需要的朋友可以參考下2022-10-10

