skip to content
cookieodd's blog

DouyinGifDownload - 抖音gif表情包下载到相册(heif格式转gif)

/ 4 min read

目录

下载

查看源码


功能介绍

抖音 GIF 表情包下载工具,支持格式转换。

核心功能

  • 长按 GIF 表情包保存到相册
  • 自动将 HEIF 格式转换为 GIF
  • 保持动画效果和画质
  • 支持评论区和聊天界面的表情包

格式转换


使用教程

步骤

  1. 编译并注入抖音 App
  2. 在评论区或聊天界面长按 GIF 表情包
  3. 选择”保存到相册”
  4. 插件自动转换格式并保存

格式对比

格式动画支持文件大小兼容性相册显示
HEIF较小iOS
GIF较大通用

环境要求

项目要求
iOS 版本14.0+
编译环境Theos
注入工具TrollStore/TrollTools
依赖框架ImageIO.framework
抖音版本建议最新版本

核心代码实现

Hook GIF 表情包长按事件

%hook AWEEmojiView
- (void)longPressGesture:(UILongPressGestureRecognizer *)gesture {
if (gesture.state == UIGestureRecognizerStateBegan) {
// 获取表情包 URL
NSString *emojiURL = self.model.url;
// 下载并转换
[self downloadAndConvertToGIF:emojiURL];
}
}
%new
- (void)downloadAndConvertToGIF:(NSString *)url {
// 下载 HEIF 文件
NSData *heifData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
// 转换为 GIF
NSData *gifData = [self convertHEIFToGIF:heifData];
// 保存到相册
[self saveGIFToAlbum:gifData];
}

HEIF 转 GIF 核心算法

%new
- (NSData *)convertHEIFToGIF:(NSData *)heifData {
// 使用 ImageIO 框架转换
CGImageSourceRef source = CGImageSourceCreateWithData(
(__bridge CFDataRef)heifData, NULL
);
NSMutableData *gifData = [NSMutableData data];
CGImageDestinationRef destination = CGImageDestinationCreateWithData(
(__bridge CFMutableDataRef)gifData,
kUTTypeGIF,
CGImageSourceGetCount(source),
NULL
);
// 设置 GIF 属性(循环播放)
NSDictionary *gifProperties = @{
(__bridge NSString *)kCGImagePropertyGIFDictionary: @{
(__bridge NSString *)kCGImagePropertyGIFLoopCount: @0
}
};
CGImageDestinationSetProperties(
destination,
(__bridge CFDictionaryRef)gifProperties
);
// 复制所有帧
NSUInteger frameCount = CGImageSourceGetCount(source);
for (NSUInteger i = 0; i < frameCount; i++) {
CGImageDestinationAddImageFromSource(destination, source, i, NULL);
}
CGImageDestinationFinalize(destination);
CFRelease(destination);
CFRelease(source);
return gifData;
}
%end

技术说明

HEIF vs GIF

HEIF (High Efficiency Image Format)

  • Apple 推出的高效图像格式
  • 文件体积小,画质好
  • iOS 原生支持,但相册无法显示动画

GIF (Graphics Interchange Format)

  • 通用的动画图像格式
  • 兼容性好,所有平台支持
  • 相册可以正常显示动画效果

转换流程

  1. 从 CDN 下载 HEIF 格式表情包
  2. 使用 ImageIO 框架解析 HEIF 数据
  3. 提取所有动画帧
  4. 重新编码为 GIF 格式
  5. 保存到系统相册

作者: @cookieodd | Telegram