uni-app 需要app原生插件给图片添加水印 因canvas有大小限制

发布于 1周前 作者 eggper 来自 Uni-App

uni-app 需要app原生插件给图片添加水印 因canvas有大小限制

7 回复

只需要一个水印插件不需要那么庞大的插件

可以做 专业插件开发 q 1196097915 主页 https://ask.dcloud.net.cn/question/91948

自定义图片水印(任意位置) Ba-Watermark

感谢,我看了没有ios的,而且样式不满足我们现有的ui设计,可以付费定制么

回复 RoseBEI: q 2579546054

在uni-app中,如果需要通过原生插件来处理大图片的水印添加,由于Canvas的大小限制,我们可以借助原生代码来处理大图。以下是一个简单的示例,展示如何通过uni-app的原生插件机制来实现这一功能。

步骤一:创建原生插件

  1. 在HBuilderX中创建原生插件项目

    • 打开HBuilderX,选择文件 > 新建 > 项目 > uni-app插件
    • 填写插件名称和相关信息,完成项目创建。
  2. 在原生插件中实现水印添加功能

    • 在iOS平台下,编辑Plugins/YourPluginName/ios/YourPluginName/YourPluginName.m文件。
    • 在Android平台下,编辑Plugins/YourPluginName/android/src/main/java/com/yourcompany/yourpluginname/YourPluginName.java文件。

iOS代码示例(Objective-C):

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface YourPluginNameHandler : NSObject <YourPluginNameHandler>

- (UIImage *)addWatermarkToImage:(UIImage *)image withText:(NSString *)text;

@end

@implementation YourPluginNameHandler

- (UIImage *)addWatermarkToImage:(UIImage *)image withText:(NSString *)text {
    // 创建上下文,注意处理大图
    CGSize imageSize = image.size;
    UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0.0);
    [image drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)];
    
    // 添加水印
    [[UIColor grayColor] set];
    NSString *drawString = [NSString stringWithFormat:@"%@", text];
    [drawString drawInRect:CGRectMake(10, imageSize.height - 40, 200, 30) withAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:20]}];
    
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return newImage;
}

@end

Android代码示例(Java):

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;

public class YourPluginName {

    public Bitmap addWatermarkToImage(Bitmap bitmap, String text) {
        Bitmap result = bitmap.copy(bitmap.getConfig(), true);
        Canvas canvas = new Canvas(result);
        Paint paint = new Paint();
        paint.setColor(Color.GRAY);
        paint.setTextSize(20);
        canvas.drawText(text, 10, result.getHeight() - 40, paint);
        return result;
    }
}

步骤二:在uni-app中调用原生插件

在uni-app的页面中,通过plus.runtime.executeuni.requireNativePlugin(取决于你的插件配置)来调用原生插件的方法。

// 假设插件ID为'your-plugin-id'
const nativePlugin = uni.requireNativePlugin('your-plugin-id');

nativePlugin.addWatermarkToImage({
    imagePath: 'path/to/your/image.jpg', // 图片路径
    text: 'Watermark Text',
    success: (res) => {
        console.log('Watermark added:', res.resultPath); // 处理返回的图片路径
    },
    fail: (err) => {
        console.error('Failed to add watermark:', err);
    }
});

请注意,这只是一个基本的示例,实际项目中可能需要处理更多的细节,如图片路径的处理、权限管理、错误处理等。

回到顶部