Android 给图片平铺多组水印

42 篇文章 0 订阅

在整张图片上添加水印,多行水印,平铺多组水印,每组包含任意条数。倾斜角度、行间距、组间距可以任意修改。

效果图:
在这里插入图片描述

代码:

 /**
     * 添加多行文本水印
     * @param context
     * @param bitmap
     * @param labels
     * @param size
     * @param color
     * @return
     */
    public static Bitmap addMultiLinesWatermark(Context context, Bitmap bitmap, List<String> labels,
                                                int size, int color) {
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();

        Bitmap.Config bitmapConfig = bitmap.getConfig();

        if (bitmapConfig == null) {
            bitmapConfig = Bitmap.Config.ARGB_8888;
        }
        bitmap = bitmap.copy(bitmapConfig, true);
        Canvas canvas = new Canvas(bitmap);
        // 画背景图
        canvas.drawBitmap(bitmap, 0, 0, null);
        canvas.rotate(-35);//旋转45度

        //创建画笔
        TextPaint mPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
//        mPaint.setTextSkewX(-0.25f);//文字倾斜
        mPaint.setColor(color);
        mPaint.setTextSize(dp2px(context, size));
        mPaint.setDither(true); // 获取跟清晰的图像采样
        mPaint.setFilterBitmap(true);// 过滤一些
        // 抗锯齿
        mPaint.setAntiAlias(true);

        float textWidth = mPaint.measureText(labels.get(0));
        int index = 0;
        int textSpace = 50;//多行文本间距
        int verticalSpace = 120;//Y轴间距

        for (int positionY = height / 10; positionY <= height; positionY += height / 10 + verticalSpace) {
            float fromX = -width + (index++ % 2) * textWidth;
            for (float positionX = fromX; positionX < width; positionX += textWidth * 3) {
                int spacing = 0;//间距
                for (String label : labels) {
                    canvas.drawText(label, positionX, positionY + spacing, mPaint);
                    spacing = spacing + textSpace;
                }
            }
        }

        //保存所有元素
        canvas.save();
        canvas.restore();
        return bitmap;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vue页面中生成图片平铺水印,可以使用HTML5的Canvas API。下面是一个简单的示例: 1. 在Vue组件中添加一个Canvas元素: ``` <canvas ref="canvas"></canvas> ``` 2. 在Vue组件的mounted钩子函数中获取Canvas元素的上下文(context),并图片: ``` mounted() { // 获取Canvas元素的上下文 const canvas = this.$refs.canvas; const context = canvas.getContext('2d'); // 图片 const img = new Image(); img.src = 'path/to/image'; img.onload = () => { // 将图片绘制到Canvas上 context.drawImage(img, 0, 0, canvas.width, canvas.height); // 添加水印 const watermarkImg = new Image(); watermarkImg.src = 'path/to/watermark/image'; watermarkImg.onload = () => { // 计算水印平铺次数 const repeatX = Math.ceil(canvas.width / watermarkImg.width); const repeatY = Math.ceil(canvas.height / watermarkImg.height); // 平铺水印 for (let i = 0; i < repeatX; i++) { for (let j = 0; j < repeatY; j++) { context.drawImage(watermarkImg, i * watermarkImg.width, j * watermarkImg.height); } } } } } ``` 3. 在Vue组件的template中添加一个按钮,点击按钮时将Canvas保存为图片: ``` <template> <div> <canvas ref="canvas"></canvas> <button @click="saveImage">保存图片</button> </div> </template> <script> export default { methods: { saveImage() { // 将Canvas保存为图片 const canvas = this.$refs.canvas; const dataURL = canvas.toDataURL('image/png'); const link = document.createElement('a'); link.href = dataURL; link.download = 'image.png'; link.click(); } } } </script> ``` 这样就可以在Vue页面中生成包含平铺水印图片,并且可以通过点击按钮将该图片保存到本地。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值