保存图片到手机相册

本文介绍了一段Objective-C代码,展示了如何从URL加载图片并将其保存到iOS设备的相册中。此外,还提供了保存操作成功或失败后的提示。
    NSURL *url = [NSURL URLWithString:self.str];
    NSData *data = [NSData dataWithContentsOfURL:url];
    UIImage *img = [UIImage imageWithData:data];
    
    // 保存图片到相册中
    UIImageWriteToSavedPhotosAlbum(img, self,  @selector(image:didFinishSavingWithError:contextInfo:), nil);

    NSLog(@"保存乐乐乐乐乐乐乐乐");






- (void)image:(UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo
{
    NSString *msg = nil ;
    if (error != NULL)
    {
        msg = @"保存图片失败" ;
        
    }
    else  // No errors
    {
        msg = @"保存图片成功" ;
    }
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:msg delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];
    [alert show];
}


### 实现保存图片手机相册的方法 对于 Vue H5 应用来说,在尝试实现保存图片手机相册功能时会遇到权限问题以及跨平台兼容性挑战。由于浏览器沙盒机制的存在,H5 页面本身并没有直接操作本地文件系统的权限[^1]。 #### 权限处理方案 针对 Android 平台,可以通过 JavaScript 调用原生接口来请求存储权限: ```javascript if (navigator.userAgent.indexOf('Android') !== -1) { window.AndroidFunction.requestStoragePermission(); } ``` 这段代码会在检测到设备为安卓系统时触发相应函数以申请必要的读写权限[^3]。 而对于 iOS 设备而言,则无需特别处理此权限因为 Safari 浏览器默认已经具备一定级别的访问控制。 #### 图片保存逻辑设计 为了使用户能够顺利地将网页上的图像保存下来,可以考虑如下两种方式之一: ##### 方案A:通过分享组件间接完成 利用微信内置浏览器或其他支持的应用程序提供的社交分享入口让用户自行选择是否要下载并储存媒体资源。这种方式不需要额外编写复杂的脚本就能满足基本需求[^4]。 ##### 方案B:借助第三方库或插件增强能力 采用一些成熟的开源工具包如 `html-to-image` 或者特定于移动环境下的 SDK ,它们往往封装好了底层 API 的调用细节从而简化开发者的工作量。不过需要注意的是这类解决方案可能仍然受限于各操作系统版本差异所带来的不确定性因素影响其稳定性表现[^2]。 #### 示例代码片段展示 下面给出一段简单的 HTML 和 JS 组合用于演示如何监听长按事件进而发起保存动作(适用于部分场景下模拟类似效果),实际项目中还需结合具体情况调整优化: ```html <img src="{{imageUrl}}" @touchstart="handleTouchStart" /> <!-- 注意这里使用了 vue.js 的语法糖 --> ``` ```javascript methods: { handleTouchStart(event){ const touch = event.touches[0]; let longPressTimer; function onTouchMove(){ clearTimeout(longPressTimer); document.removeEventListener('touchmove',onTouchMove,false); document.removeEventListener('touchend',onTouchEnd,false); } function onTouchEnd(){ if(new Date().getTime() - startTime > 800){ // 自定义长时间阈值判断标准 saveImageToAlbum(this.src); // 假设存在这样一个异步方法负责最终执行保存流程 }else{ console.log("Short press"); } clearTimeout(longPressTimer); document.removeEventListener('touchmove',onTouchMove,false); document.removeEventListener('touchend',onTouchEnd,false); } var startTime=new Date().getTime(); longPressTimer=setTimeout(onTouchEnd,800); document.addEventListener('touchmove',onTouchMove,{passive:false}); document.addEventListener('touchend',onTouchEnd); }, async saveImageToAlbum(url){ try{ await navigator.clipboard.writeText(url); // 这里仅作为示意,真实环境中应替换为此处提到过的更合适的技术手段 alert("已复制链接,请前往图库粘贴查看!"); }catch(err){ console.error("Failed to copy image URL",err); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值