web-dev-qa-db-ja.com

Androidで画像に透かし効果を追加するにはどうすればよいですか?

フレーム付きの画像があり、透かし効果を追加する必要があります。どうすればよいですか?

18
info

Android画像処理 こちら で素晴らしいチュートリアルを見つけました。

public static Bitmap mark(Bitmap src, String watermark, Point location, Color color, int alpha, int size, boolean underline) {
    int w = src.getWidth();
    int h = src.getHeight();
    Bitmap result = Bitmap.createBitmap(w, h, src.getConfig());

    Canvas canvas = new Canvas(result);
    canvas.drawBitmap(src, 0, 0, null);

    Paint paint = new Paint();
    Paint.setColor(color);
    Paint.setAlpha(alpha);
    Paint.setTextSize(size);
    Paint.setAntiAlias(true);
    Paint.setUnderlineText(underline);
    canvas.drawText(watermark, location.x, location.y, Paint);

    return result;
}

基本的な画像処理に関するこのような便利なチュートリアルを共有してくれたピート・ヒューストンに感謝します。

35
AndroidLearner

他の参照のために、アプリケーションのロゴ(ドローアブルフォルダーにあります)を画像の上に追加する場合は、次の方法を使用します。

private Bitmap addWaterMark(Bitmap src) {
        int w = src.getWidth();
        int h = src.getHeight();
        Bitmap result = Bitmap.createBitmap(w, h, src.getConfig());
        Canvas canvas = new Canvas(result);
        canvas.drawBitmap(src, 0, 0, null);

        Bitmap waterMark = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.logo);
        canvas.drawBitmap(waterMark, 0, 0, null);

        return result;
    }
18
Hesam

誰かがまだこれを探しているなら、私は良い解決策を見つけましたここ

右下部分に透かしを追加し、に応じてそれを拡大縮小しますまさに私が探していたソース画像。

/**
 * Embeds an image watermark over a source image to produce
 * a watermarked one.
 * @param source The source image where watermark should be placed
 * @param watermark Watermark image to place
 * @param ratio A float value < 1 to give the ratio of watermark's height to image's height,
 *             try changing this from 0.20 to 0.60 to obtain right results
 */
public static Bitmap addWatermark(Bitmap source, Bitmap watermark, float ratio) {
    Canvas canvas;
    Paint paint;
    Bitmap bmp;
    Matrix matrix;
    RectF r;

    int width, height;
    float scale;

    width = source.getWidth();
    height = source.getHeight();

    // Create the new bitmap
    bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG | Paint.FILTER_BITMAP_FLAG);

    // Copy the original bitmap into the new one
    canvas = new Canvas(bmp);
    canvas.drawBitmap(source, 0, 0, Paint);

    // Scale the watermark to be approximately to the ratio given of the source image height
    scale = (float) (((float) height * ratio) / (float) watermark.getHeight());

    // Create the matrix
    matrix = new Matrix();
    matrix.postScale(scale, scale);

    // Determine the post-scaled size of the watermark
    r = new RectF(0, 0, watermark.getWidth(), watermark.getHeight());
    matrix.mapRect(r);

    // Move the watermark to the bottom right corner
    matrix.postTranslate(width - r.width(), height - r.height());

    // Draw the watermark
    canvas.drawBitmap(watermark, matrix, Paint);

    return bmp;
}

そして、それは非常にプラスであるものはよくコメントされています!

5
Irshad P I

waterrippleeffect を探しているようです。完全なソースコードをチェックアウトしてください。また、スクリーンショットを見て、効果がどのように見えるかを確認してください。

4
Lalit Poptani

androidWM を使用すると、透かしが見えなくても、透かしを画像に追加できます。

依存関係を追加します。

dependencies {
  ...
  implementation 'com.huangyz0918:androidwm:0.2.3'
  ...
}

およびJavaコード:

 WatermarkText watermarkText = new WatermarkText(“Hello World”)
                    .setPositionX(0.5) 
                    .setPositionY(0.5) 
                    .setTextAlpha(100) 
                    .setTextColor(Color.WHITE) 
                    .setTextFont(R.font.champagne) 
                    .setTextShadow(0.1f, 5, 5, Color.BLUE); 

 WatermarkBuilder.create(this, backgroundBitmap) 
                    .loadWatermarkText(watermarkText) 
                    .getWatermark() 
                    .setToImageView(backgroundView); 

このような画像タイプの透かしやテキスト透かしを簡単に追加でき、ライブラリのサイズは30Kb未満です。

0
Yizheng Huang