惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AWS News Blog
AWS News Blog
T
Tenable Blog
Project Zero
Project Zero
T
The Exploit Database - CXSecurity.com
L
LINUX DO - 热门话题
T
Threat Research - Cisco Blogs
T
Threatpost
Security Latest
Security Latest
C
Cisco Blogs
L
Lohrmann on Cybersecurity
S
Security @ Cisco Blogs
Google Online Security Blog
Google Online Security Blog
NISL@THU
NISL@THU
AI
AI
V
Vulnerabilities – Threatpost
Google DeepMind News
Google DeepMind News
C
Cyber Attacks, Cyber Crime and Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
The Last Watchdog
The Last Watchdog
G
GRAHAM CLULEY
Cloudbric
Cloudbric
H
Hackread – Cybersecurity News, Data Breaches, AI and More
H
Hacker News: Front Page
U
Unit 42
A
Arctic Wolf
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MyScale Blog
MyScale Blog
O
OpenAI News
Scott Helme
Scott Helme
V2EX - 技术
V2EX - 技术
P
Proofpoint News Feed
博客园 - 叶小钗
Hugging Face - Blog
Hugging Face - Blog
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Cyberwarzone
Cyberwarzone
博客园 - 【当耐特】
H
Heimdal Security Blog
S
Schneier on Security
阮一峰的网络日志
阮一峰的网络日志
Help Net Security
Help Net Security
D
DataBreaches.Net
Y
Y Combinator Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
TaoSecurity Blog
TaoSecurity Blog
K
Kaspersky official blog
N
News and Events Feed by Topic
WordPress大学
WordPress大学
P
Palo Alto Networks Blog

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派 万字剖析:千问App深度体验报告(2026) - 少数派 在2026年,如何真正防止别人抄袭你的作品 - 少数派 怎么用 50 块搭个 AI 语音助手?我踩了 3 天坑 - 少数派 YeeroAI:让 AI 对话真正成为知识管理的一部分 - 少数派 爬泰山 - 少数派 「旅图显影」 App 更新:这次,我们补上了一点「手感」 - 少数派 假期出门太折磨?我的 23 条经验帮你规划惬意旅行 - 少数派 工作流会变吗 - 少数派 Claude Opus 4.6 怎么用最省钱?我测了 5 种方案 - 少数派 GPT Image 2 让图文并茂不再稀罕 - 少数派 用户侧出发——什么是AI,我要不要学习? - 少数派 找片、转存、整理、播放一条龙!让你的付费网盘值回票价 - 少数派 欢迎试用!日课一问2.0插件 - 少数派 自己做的MDeditor,原本想购买 Typora 试了两次支付不成功,干脆自己做一个 - 少数派 vibe coding了一个 3MB 的小工具,让 ~/Downloads 彻底告别混乱 - 少数派 因为受不了 Mac 的风扇策略,我做了一个风扇控制工具 - 少数派 别只怪模型 - 少数派 Warp 终端的 AI 功能怎么用?我测了一周的体验 - 少数派 AI 写代码老是出 bug?这 5 个配置我后悔没早知道 - 少数派 「新玩意」苹果出相机可能就这样:Sigma BF + 45mm F2.8 DG Contemporary - 少数派 一个面向2030年的AI操作系统是什么样子的:浅谈cola这款有灵魂的Agent - 少数派 别只看写代码 - 少数派 每天解决10个问题,还是一口气攻坚解决400个? - 少数派 AI 交易机器人怎么搭?我用 Claude 跑了一周实盘 - 少数派 Maptoposter Online:把你爱的城市画成艺术海报 - 少数派 Function Calling 怎么用?我测了 3 个模型发现差距真大 - 少数派 Legend Talk:我做了个 AI 圆桌,让 160 位思想家围着你的问题转 - 少数派 如何找到自己的蓝方?在小县城寻找压力测试 - 少数派 语音输入与软件接口|2026年聊AI时,我们都聊些什么(上) - 少数派 混动已经卖爆,纯电又来补刀——钛7闪充版简直“不讲武德” - 少数派 本月玩什么|朋友收藏、识质存在、沙罗周期 - 少数派 为什么要每天坚持输出? - 少数派 Claude API 挂了好几个小时,你的项目有备用方案吗? - 少数派 Function Calling 没你想的复杂——我用它做了个有点用的工具 - 少数派 登录系统立即播放视频或者图片音乐的软件 - 少数派 我为什么创建 FlipHTML5 下载工具 - 少数派 残局没电?多品牌外设电量统一管理软件EasyBluetooth已支持RTSS游戏内显示以及AIDA64 - 少数派 前往通义路的路 - 少数派 太好看了,媲美Sun的个人导航页,NAS部署星云门户 - 少数派 乌黑嘴唇“一键检测”上线了 - 少数派 派早报:Claude AI 接入多个创意软件生态、FILCO 生产方接手品牌等 - 少数派 【更新】BearCLI、Claude 连接器与 MCP 服务器 - 少数派 记了上千条流水,还是看不懂财务?我做了一个让 AI 读懂账本的工作台 - 少数派 MINI R56 升级原厂 Sport 模式 - 少数派 新玩意 | 一棵柠檬树(仿真版) - 少数派 Momenta的“物理AI”野望,需迈过“含摩量”这道关 - 少数派 网页直接投屏控制手机!NAS一键部署PandaScrcpy,流畅丝滑可远程。 - 少数派 众测|邀你一同探索随身 AI 硬件入口 YoooClaw C·ONE - 少数派 2050大会:分享时间是真诚 参会记 - 少数派 iPad 赋能电影创作:国内首部宣纸手绘长片《燃比娃》的幕后故事 - 少数派 AI的审美:我用 8 个大模型给 100 张旅行照片打分 - 少数派 普通人如何破圈?去参加一个本地协会 - 少数派 把极空间的图标全换了,主题DIY全攻略打造你的专属NAS桌面 - 少数派 电子便签墙,帮你实现便签自由 - 少数派 我如何用三个 CLI 工具取代文档创建需求 - 少数派 原来真的有人可以玩一辈子 - 少数派 社区速递 139 | 派友热议三月买了啥、复古单反尼康 Df 体验 - 少数派 06 作品的赏析与评价 - 少数派 TDS REVIEW|索尼 WF-1000XM6 降噪真无线耳机体验 - 少数派 35.98万起售的第二代腾势D9,我看重的不是堆料,而是不凑合 - 少数派 鼠须管 Squirrel 皮肤配置指北 - 少数派 从watch ultra2换到redmi watch6 - 少数派 派早报:阿里巴巴发布视频生成模型 HappyHorse 1.0 等 - 少数派 别迷信1M - 少数派 家人们天塌了!网盘“大封杀”,多个渠道多条路,NAS部署PanHub - 少数派 AI与人勾心斗角!NAS一键部署AI狼人杀,假日休闲必备。 - 少数派 电商必备!Comfyui工作流批量生图插件,一次生成12张!支持Nano banana pro模型 - 少数派 Comfyui工作流配置Gpt-image-2模型教程,0.03/张 - 少数派 OpenClaw第三方APi怎么配置?可使用Gpt-image-2模型 - 少数派 会员社区话题精选 Ep. 103 - 少数派
使用「捷径」给 GIF 加上进度条 - 少数派
2018-09-08 · via 少数派

看到一张 GIF,可把我笑坏了,最后那只汪也太不给面子了吧哈哈哈哈~

最后那只汪也太不给面子了吧

这样的图片,就是利用 GIF 循环播放特性做出来的趣味效果。

但是给文章配图时,有些 GIF 太长或没有明显的起始、结束标志,此时读者可能会产生一种焦虑感:这个 GIF 什么时候完?我到底是不是已经看完一遍了?其实,加个进度条就能解决问题,比如这样:

利用带进度条的 GIF 可以辅助表达

实现进度条的原理也并不复杂:假如某个 GIF 共有 n 帧,那么播放到第 i 帧时,其进度(以小数计)就应该是 i÷n。我们考虑往这一帧上添加一个进度条,设帧宽度为 width,进度条的长度就应该是 width×i÷n,是不是?具体的实现方法有许多,可以使用 Photoshop 等专业软件来做,本文介绍一种简单的方法:利用 iOS 12 中内置的应用「捷径」来实现。

动作链接点击下载 🔗

使用方式:点击链接导入这个动作,运行它并从相册选择需要处理的 GIF 即可,最后的结果会保存回手机相册。

运行过程

下面我来讲解一下如何一步步制作并优化这个动作,以供参考。

动作解析

需求

明确需求是(功利性地)做任何东西之前的必须步骤。这里我们的需求是:制作一个动作,它的输入是从相册选择的一张 GIF,输出则是一张带有进度条的 GIF。

注意,最终版本的捷径不需要自备素材,进度条的图片已经被「内嵌」到了动作中。具体思路可以看下面的制作和分析改进小节。

制作

过程原理在前文已经讲明了。最为关键的步骤是:提取出 GIF 的每一帧,在每帧上叠加合适长度的进度条,然后再把处理后的帧拼接成新的 GIF。

iOS 12 内置的「捷径」应用是 iOS 平台著名效率应用 Workflow 的继任者,里面提供了许多基本的功能模块,用户可自由组合这些模块来实现相对更复杂的需求。在本例中,捷径提供了四个最为关键的动作:Get Frames From Image 、Resize Image、 Combine Images 与 Make GIF。

  • Get Frames From Image 动作的输入是一张 GIF,运行后可以提取出 GIF 的每一帧,得到一个包含了多张图片的列表(list)。
  • Resize Image 动作的输入是一张图片,它可以将这张图片缩放到设定的尺寸。本例中就用它来制作进度条。你想到应该怎么做了吗?所谓进度条,其实就是一张细长的纯色图片,它可以由任何一张纯色图片制得:只要让它的宽度是进度条长度,高度大约两三个像素即可。
  • Combine Images 动作的输入是一个图片列表4 ,它的作用是拼接列表中的图片,纵向或横向皆可,并输出拼接后的图片。本例中就用它来给每一帧加上进度条。
  • Make GIF 的输入是一个图片列表,它可以将这个列表中的图片合成为一个 GIF。

不难画出完整的流程图:

流程图

分析与改进

按照以上流程图制作的动作固然可以使用,但是有一个很大的缺点:它要求使用者相册中有一张纯色图片以备使用,这……太不优雅了。再说,如果你分享给你女朋友,她却发现不能直接用还要有什么纯色图,她哪里去找什么纯色图?你怎么这么敷衍?你是不是不爱她了?

一种解决思路是:运行前检测使用者设备上有没有这个纯色图片,若有,那就继续运行,若没有,则利用 Get Contents of URL 临时下载,并存储备用。存储的位置若可能的话,最好不要是相册,以免污染别人的照片库。很自然的,iCloud Drive 是一个绝佳选择。因此,流程图的前半部分变成了:

判断素材是否存在并对应处理

好的,这次女朋友不会夺命三问了。但是等等……若是女朋友手机没网或者提供这个纯色图片的服务器挂了呢?虽然确实不是你的问题,但是女朋友仍然有可能迁怒于你,害怕。我们要把隐患扼杀在摇篮中。

究其原因,一切都是因为这个动作需要引用外部的资源:一张纯色图。如果它能直接内置到动作里就好了。能不能办到?当然可以。

捷径应用里内置了一个动作:Base64 Encode,有编程经验的同学应该就明白了。简单地说,Base64 1 可以把一个二进制文件转换为一串纯文本,也能从文本中解码出原来的文件。既然动作不能存储图片文件,但存储文本却是可以的呀!因此在最顶部放一个 text 块,里面填写上纯色图的 Base64 编码,运行时再从这里解码得到纯色图片即可。应该说到这里,这个动作完成度算是比较高了。

使用 Base64 来提高动作独立性

再来看看带进度条的 GIF:

不能整人了,不开心 ̄へ ̄ 

除了本文的动作,其他需要图片素材的捷径(比如 带壳截图)也可以利用 Base64 编码来存储图片,让动作更加简洁。

延伸

动作的制作与优化上面就聊完了。这部分是一些额外的讨论和抛砖引玉的内容。

Add to Variable

在前面的流程图中,我很自然地使用了 Add to Variable 这个动作,来临时保存需要拼接的进度条和某帧。捷径应用中对这个步骤的简介是:

Appends this action's input to the specified variable, creating the variable if it does not exsist.This allows you to make a variable hold multiple items.

也就是,将这个步骤的输入追加到某个变量的末尾。值得注意的是,并不与某个变量合并,而是追加。举例来说,如果你把一段文本通过这个步骤 add 到另一个变量(也是一段文本)后,并不会得到一段包含了这二者的文本,而是得到了一个「列表」,里面分别包含了两段文本。

听上去很绕。但我们只需要知道,这个步骤的输出一般会是一个列表。Add to Variable 这个步骤的作用可归结于暂存多个变量,以待后续处理。为什么这么说?因为「列表」其实是一种特殊的变量——存储变量的变量。

暂存变量

以前使用过这个应用的玩家可能知道,应用中有一个叫做 List 的步骤,可以在运行过程中保存几个变量以供后续处理。在本例中,循环中第一次 Set Variable 和 后面 Add to Variable 然后拼接为新的一帧这一段完全可以这么改写:

那么 Add to Variable 还有什么存在的意义?

你是否注意到,虽然 List 这个动作在这里的效果要比 Add to Variable 强,使得动作看起来更简洁,但它有一个特点:容量是固定的2 。在制作这个动作时只为它预留了两个位置,一个用来放进度条,一个用来放图片帧,那就不能再运行过程中存储更多的东西了。

当需要暂存的内容个数不定时,List 动作就力不从心了,这时就轮到 Add to Variable 上场。不论有两个、五个还是十个一百个变量,Add to Variable 都能老老实实地帮你存好。本文中要处理的 GIF 帧数不一,因此即使经过上图的改写,与进度条拼接后的帧仍然要使用 Add to Variable 暂存最后再合成 GIF3 。

值得注意的是,列表中的数据类型无需是相同的,你可以把图片、音乐、文本等等内容添加到一个 List 里。暂存多个变量的部分至此结束。

以待后续处理

不论使用 List 还是 Add to Variable,你现在得到一个列表了。你能想到对它进行什么操作?抽象地说,操作可分为对列表中的所有元素处理,或者对其中的某些进行处理。本文中拼接列表中的图片属于前者。

看一个属于后者的例子。所谓「对某些进行处理」,无非是用户手动选择某些,或者自动过滤出某些。少数派 Shortcuts Gallery 中有个影评日记的动作就是就是这样的。这个动作比较复杂,我不具体介绍里面的内容,它的流程是这样的:从豆瓣根据某个关键字搜索电影,获得前 5 个搜索结果,提取每个搜索结果的重要信息合成一个 List,供使用者选择,再根据选择的结果从豆瓣请求更为详细的信息然后进行后续处理,有兴趣请下载影评日记这个动作看看。

这里有一个坑

回到上面那个流程图,若是把循环中的第一个 Set Variable 也改成 Add to Variable,会发生什么事情?大家可以试一试。

结果就完全不对了,但看起来没有什么逻辑问题啊?就是添加到 temp 变量嘛,虽然循环开始时没有这个变量,但苹果的文档也说了,没有 temp 变量时会自动创建的。

这里的问题在于,Shortcuts 中的变量是全局有效的。因此在下一次循环开始时,上一次的循环的 temp 变量仍然是有效的,Add to Variable 是在上一次运行结束时 temp 变量上追加,自然就不对了。原动作中的 Set Variable 相当于是清空了 temp 变量,然后把它的值设为预定的值,如果这个位置非要使用 Add to Variable 的话也不是不可以,那么就需要在每个循环末尾添加两步:Nothing→Set Variable(temp),这相当于手动清空了 temp 变量。

Combine Images

前文提到,Combine Images 动作的作用是把一个列表里的图片拼接起来。动作上有三个选项:Mode,拼接方式,可选并列或者网格;Direction,方向,可选水平或者竖直,当 Mode 是网格时该选项无效;Spacing,间隔,即拼接时两张图片之间的距离。

本文中,Combine Images 的输入是一个图片 list,但我在脚注里说,不一定非得如此。你可以试试在一个 list 中放一段文本和一张图片,然后把这个 list 传给 Combine Images,看看会出现什么结果?

没错,动作会将文本转换为图片然后把它们拼接起来,对习惯了严格声明数据类型的程序员来说这看起来是很奇妙的,虽然最终的效果可能不是很好(尺寸会变得很奇怪)。

关于这一点在苹果的 Shortcuts 文档 中有详细说明:

When an action expects one type of content and you pass it another type of content, the Content Graph automatically converts that content to the appropriate type.

也就是「自动类型转换」。

「捷径」应用的前身是 Workflow,可见这个开发团队为了使任何人都能顺畅地使用这个 App 在背后做了多少工作。要知道,对数据类型、程序代码都一无所知的用户会制作出无数千奇百怪、奇思妙想的动作,要考虑到所有的意外是极为困难的,还不能简单地报错、抛出异常,因为这样太容易「劝退」了。正是开发团队在背后做的工作使我在使用这个应用时屡屡觉得惊喜,这让我想起了小时候偶得一套螺丝刀,才发现原来我仅靠自己的力量就能拆掉那么多东西(误),那是一种发自内心的喜悦。

本文也发表于我的博客:使用「捷径」给 GIF 加上进度条 - 熊猫小A的博客