+ (instancetype)waterMarkWithImage:(UIImage *)image andMarkImageName:(NSString *)markName{

    

    UIImage *watermarkImage = [UIImage imageNamed:markName];

    if (!watermarkImage) {

        NSLog(@"水印图片加载失败: %@", markName);

        return image;

    }

    

    // 获取原图尺寸和方向

    CGSize originalSize = image.size;

    BOOL isLandscape = originalSize.width > originalSize.height;

    

    // 根据图片方向设置不同的水印比例

    CGFloat watermarkRatio;

    if (isLandscape) {

        watermarkRatio = 0.04; // 横图水印比例

    } else {

        watermarkRatio = 0.06; // 竖图水印比例

    }

    

    CGFloat targetWidth = originalSize.width * watermarkRatio;

    CGFloat scaleFactor = targetWidth / watermarkImage.size.width;

    CGFloat watermarkWidth = watermarkImage.size.width * scaleFactor;

    CGFloat watermarkHeight = watermarkImage.size.height * scaleFactor;

    

    // 根据方向设置不同的边距

    CGFloat marginX, marginY;

    if (isLandscape) {

        marginX = originalSize.width * 0.02;

        marginY = originalSize.height * 0.02;

    } else {

        marginX = originalSize.width * 0.03;

        marginY = originalSize.height * 0.03;

    }

    

    // 创建图像上下文并绘制水印

    UIGraphicsBeginImageContextWithOptions(originalSize, NO, 0);

    [image drawInRect:CGRectMake(0, 0, originalSize.width, originalSize.height)];

    

    CGRect watermarkRect = CGRectMake(13,

                                     marginY-20,

                                     watermarkWidth,

                                     watermarkHeight);

    

    [watermarkImage drawInRect:watermarkRect blendMode:kCGBlendModeNormal alpha:1.0];

    

    UIImage *watermarkedImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    

    return watermarkedImage;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88765.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88765.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/88765.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝牙工作频段与跳频扩频技术(FHSS)详解:面试高频考点与真题解析

蓝牙技术凭借其低功耗、短距离通信的特性,已成为物联网、智能穿戴等领域的核心技术之一。其核心竞争力在于对 2.4GHz ISM 频段的高效利用与跳频扩频技术(FHSS)的创新应用。本文将系统梳理蓝牙工作频段与 FHSS 的高频考点,并结合历年真题与解析,快速掌握核心知识,轻松应对…

ArkTS与仓颉开发语言:鸿蒙编程的双子星

前言 鸿蒙是多语言生态,ArkTS、仓颉和 C/C充分互补。ArkTS 是动态类型编程语言,主打易学易用、生态丰富、极简开发、持续创新四大特征;仓颉是静态类型编程语言,主打高性能、强安全、跨平台、智能化等特性。为满足不同业务场景诉求…

怎么把本地仓库push 到gitlab 上

1. 首先 我们需要再gitlab 上建立一个group , (group 可也设定是public 还是private),public 可以不用用户密码用 https 下载 2. 再gitlab 的group 下 建立一个仓库 (pulbic/private) 如何删除 一个仓库(…

论文笔记(八十六)V-HOP: Visuo-Haptic 6D Object Pose Tracking

V-HOP: Visuo-Haptic 6D Object Pose Tracking 文章概括摘要1. 引言2.背景A. 问题定义B. 触觉表示基于单元阵列的传感器基于视觉的传感器 3. 方法学A. 手爪表示B. 物体表示C. 网络设计D. 训练范式 IV. 实验A. 多形态数据集B. 位姿跟踪比较C. 模态消融D. 融合策略消融E. 遮挡对性…

[论文阅读] (40)CCS24 PowerPeeler:一种通用的PowerShell脚本动态去混淆方法

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…

DeepSeek工具对AI编程帮助

一、技术架构:混合专家模型(MoE)的颠覆性优势 DeepSeek的核心竞争力源于其混合专家模型架构(Mixture of Experts): 参数规模:6710亿参数,每个token仅激活37亿参数,实现超…

链表题解——两数相加【LeetCode】

方法一:递归 写法一:创建新节点 算法思路解析 该实现采用 递归方式 逐位处理两个链表,并考虑进位 carry: ✨ 步骤拆解 递归终止条件:当 l1, l2 都为空且没有进位(carry 0),说明…

AutoGen框架的ReAct推理模式的多跳测试

问题:特斯拉公司 CEO 的出生地是哪个国家? 答案:南非。 推理过程: 第一跳:确定特斯拉(Tesla, Inc.)的 CEO。特斯拉的 CEO 是埃隆马斯克(Elon Musk)。 第二跳:…

MCP-安全(entra)

保护 AI 工作流程:模型上下文协议服务器的 Entra ID 身份验证 介绍 保护模型上下文协议 (MCP) 服务器的安全与锁好家门一样重要。保持 MCP 服务器开放会导致您的工具和数据遭受未经授权的访问,从而导致安全漏洞。Microsoft Entra ID 提供强大的基于云的身…

Node.js特训专栏-实战进阶:8. Express RESTful API设计规范与实现

🔥 欢迎来到 Node.js 实战专栏!在这里,每一行代码都是解锁高性能应用的钥匙,让我们一起开启 Node.js 的奇妙开发之旅! Node.js 特训专栏主页 专栏内容规划详情 Express RESTful API设计规范与实现:构建标准化、可维护的接口服务 在前后端分离架构盛行的今天,RESTful A…

2025企业数字化转型之道

进入2025年,企业的数字化转型已经不再是选择题,而是生存和发展的关键。如何抓住技术的浪潮,提高效率、提升客户体验、加强创新,成了企业亟需解决的问题。 1.自动化:释放人力潜力 自动化是数字化转型的起点。通过RPA&a…

TCP 保活定时器详解:原理、配置与最佳实践

一、TCP 保活定时器基础原理 TCP 保活定时器(TCP Keepalive Timer)是 TCP 协议中用于检测长时间无数据传输的连接是否仍然有效的机制。它通过在连接空闲一段时间后发送探测报文,确认对方主机是否仍然可达,从而避免在对端异常断开…

浏览器工作原理27 [#]PWA:解决了web应用哪些问题

引用 《浏览器工作原理与实践》 PWA,全称是 Progressive Web App ,翻译过来就是渐进式网页应用。根据字面意思,它就是“渐进式 Web 应用”。对于 Web 应用很好理解了,就是目前普通的 Web 页面,所以 PWA 所支持的首先是…

Leetcode百题斩-图论

再开下一个坑,图论专题居然以前都刷过了,三道Medium也没什么好说的,直接过 994. Rotting Oranges[Medium] 发现一个很神奇的事,这一题我再5年前的时候做,还是个Easy,现在已经涨到Medium了。看来随着通货膨…

将Python Tkinter程序转换为手机可运行的Web应用 - 详细教程

前言 作为一名Python开发者,你可能已经使用Tkinter创建了一些桌面GUI应用。但是如何让这些应用也能在手机上运行呢?本教程将详细介绍如何将基于Tkinter的Python程序转换为手机可访问的Web应用,让你的应用随时随地可用! 一、为什…

Markdown批量转PDF工具:高效便捷的文档转换解决方案

Markdown批量转PDF工具:高效便捷的文档转换解决方案 前言 在日常工作和学习中,我们经常需要将Markdown文档转换为PDF格式,无论是为了分享、打印还是归档。虽然有很多在线工具可以实现这一功能,但当面对大量文档时,逐…

51c~嵌入式~PLC~欧姆龙~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/14017854 > PLC-- 欧姆龙 --专辑 一、欧姆龙PLC指令应用 欧姆龙PLC是一种功能完善的紧凑型PLC,能为业界领先的输送分散控制等提供高附加值机器控制;它还具有通过各种高级内装板进行升级的能…

机器人 URDF学习笔记

目录 URDF(Unified Robot Description Format) ✅ URDF 描述的内容包括: URDF(Unified Robot Description Format) 意思是:统一机器人描述格式。 它是一种用 XML 编写的格式,专门用于描述机器…

MySQL-主从复制分库分表

5 MySQL-主从复制&分库分表 5.1mysql 主从复制 5.1.1. 概述 主从复制是将主数据库的DDL和DML操作通过二进制日志(binlog文件)传送到从库服务器,然后在从库上对这些日志重新执行,从而使得主库和从库的数据保持同步。 MySQL…

7.6.平衡二叉树(英文缩写为AVL树)

一.平衡二叉树的定义: 1.平衡二叉树简称平衡树(AVL树,该缩写来源于平衡二叉树的发明人的名字简称); 2.结点的平衡因子左子树高-右子树高; 3.以上述图片左下角的二叉树为例,结点50的左子树的高度为2,右子树…