在微信小程序中截屏

Posted HuaiXiaoAi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在微信小程序中截屏相关的知识,希望对你有一定的参考价值。

碰到了产品经理的需求,在小程序中需要点击按钮截取一张单据的图片,找了很多资料 都是从小程序端跳到h5页面在h5页面进行截图。

我这里是用uniapp写的,具体操作如下:

<button @click='goH5'>跳到h5页面</button>

这个时候我们可能会带一些参数,我是在路由跳转的时候将参数带到路径后面

goH5()
    uni.redirectTo(
        url:`/web?&a=$1&b=$2`
)

这里我多写了一层,点击按钮会跳到另一个vue文件里面,这个h5页面在这个单独的vue文件中,

当然也可以不单独创建一个vue文件,我这里写多一层是为了在项目文件目录中更清晰一些。

<template>
    <view>
        <web-view :src='hUrl'>
    </view>
</template>

web-view 就是我们的html页面。

小程序还没有上线时,我们用来测试,这时hUrl是html的本地路径,我这里是用vsCode的live serve打开的。

接收参数是在onLoad时获取到传来的参数。

onLoad(options)
    console.log(options)        //a:1,b:2
    this.a = options.a
    this.b = options.b

然后在mounted中

mounted()
    this.hUrl = `http://127.0.0.1:5000/web.html?&a=$this.a&b=$this.b`

这样,在打开这个vue文件的时候,就会自动打开h5页面并携带上你的参数。

随后,在h5页面我们需要使用先获取h5页面的路径,然后使用querystring.parse()解析路径,获取到我们需要的参数。

let url = window.location.href
let obj = querystring.parse(url)

console.log(obj)    //a:1,b:2
    

页面布置完之后,我们需要使用dom-to-image这个插件进行截图。

let dom = document.querySelector('#dom')
domtoimage.toJpeg(dom, bgcolor: "#ffffff",quality: 1).then(res=>
                    console.log(res)      //把res复制到浏览器上就可以看到自己的截图  
                )

以编程方式在 iPad 中截屏

【中文标题】以编程方式在 iPad 中截屏【英文标题】:Screen capture in iPad programmatically 【发布时间】:2013-02-04 14:14:49 【问题描述】:

在我的 iPad 应用程序中,我想实现一个功能,例如当用户单击应用程序中的按钮时,当前屏幕的屏幕截图应存储在数据库中。我是 ios 开发的新手,我完全不知道如何实现它。请指导我如何。

【问题讨论】:

【参考方案1】:

请参阅this link。在这里您将找到有关如何截取屏幕截图的代码。

不要将图像保存在数据库中,将图像保存在 iPad 的文档目录中。只需将该图像的文件名保存在数据库中,这将有助于您轻松获取图像。

希望这些信息对您有所帮助..

【讨论】:

【参考方案2】:

试试这个...

- (UIImage*)captureView:(UIView *)view 

    CGRect rect = [[UIScreen mainScreen] bounds];
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [view.layer renderInContext:context];
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return img;


- (void)saveScreenshotToPhotosAlbum:(UIView *)view 

    appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];  
    UIImageWriteToSavedPhotosAlbum([self captureView:self.view], nil, nil,nil);

只需将您想要捕获的任何 Uiview 发送到 - (UIImage*)captureView:(UIView *)view 方法

【讨论】:

【参考方案3】:

其他答案中的链接确实提供了很好的解决方案。正如 P.J 所建议的,最好将图像保存在文档目录中,并且只将文件名保存在数据库中。

但是,如果您迫切希望将图像保存在数据库中,这里是我使用的示例

NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO TABLE_NAME (NAME, IMAGE) VALUES (\"%@\", (?))", name];


 if(sqlite3_prepare_v2(databaseObj,[insertSQL cStringUsingEncoding:NSUTF8StringEncoding], -1, &statement, NULL) == SQLITE_OK)
                
                    NSData* imageData = UIImagePNGRepresentation(image);
                    sqlite3_bind_blob(statement, 2, [imageData bytes], [imageData length], SQLITE_STATIC);

                if(sqlite3_step(statement) != SQLITE_DONE )
                    NSLog( @"Error: %s", sqlite3_errmsg(databaseObj) );
                else
                    NSLog( @"Insert into row id = %lld", (sqlite3_last_insert_rowid(playerDB)));
                sqlite3_finalize(statement);
            

【讨论】:

嗨,这个问题被 5 人否决了。请告诉我哪里出了问题,以便我改正。 @user1531912 :可能是因为您没有进行任何研究并发布了答案。否则,网站上的答案几乎就在那里,并进行了一些修改。虽然不确定...

以上是关于在微信小程序中截屏的主要内容,如果未能解决你的问题,请参考以下文章

(微信小程序系列:一)携带参数跳转半屏微信小程序 先 A->B 后 B ->A

微信小程序系列:一携带参数跳转半屏微信小程序 先 A->B 后 B ->A

在微信小程序中使用LeanCloud

微信开发者工具小程序二维码会失效

怎样在微信小程序表格中插入列

微信小程序需要后台吗?怎么搭建后台