# 动画头像

**URL:** https://meta.discourse.org/t/animated-avatar/220445
**Category:** Plugin
**Tags:** experimental
**Created:** [2022年三月8日 18:24 UTC](https://meta.discourse.org/t/animated-avatar/220445 "2022-03-08T18:24:58Z")
**Posts on this page:** 20
**Page:** 3

<div class="post-metadata">

### Author: ![dillfrescott](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/dillfrescott/32/369312_2.png) [@dillfrescott](https://meta.discourse.org/u/dillfrescott)
#### Post date: [2024年三月10日 18:51 UTC](https://meta.discourse.org/t/animated-avatar/220445/54 "2024-03-10T18:51:45Z")

</div>

这是否支持个人资料横幅？

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2024年六月5日 16:14 UTC](https://meta.discourse.org/t/animated-avatar/220445/55 "2024-06-05T16:14:32Z")

</div>

`install.sh` 安装脚本中的某些内容破坏了 Discourse 的重建，[参见此处](https://meta.discourse.org/t/cannot-build-on-arm-zlib-buferror-during-assets-precompile/309300)。

---

<div class="post-metadata">

### Author: ![Genisis](https://avatars.discourse-cdn.com/v4/letter/g/f475e1/32.png) [@Genisis](https://meta.discourse.org/u/Genisis)
#### Post date: [2024年六月14日 19:54 UTC](https://meta.discourse.org/t/animated-avatar/220445/56 "2024-06-14T19:54:33Z")

</div>

看到这条评论，我本来要安装这个插件，但现在打消念头了，哈哈。

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2024年六月26日 21:54 UTC](https://meta.discourse.org/t/animated-avatar/220445/57 "2024-06-26T21:54:45Z")

</div>

> [@Roi](#):
>
> `install.sh` 安装脚本中的某些内容会破坏 Discourse 的重新构建，[请参阅此处](https://meta.discourse.org/t/cannot-build-on-arm-zlib-buferror-during-assets-precompile/309300)。

仍然是这种情况。注释掉 `install.sh` 部分，然后重新构建。取消注释，再次重新构建。这样就行了。奇怪。

---

<div class="post-metadata">

### Author: ![Olle11](https://avatars.discourse-cdn.com/v4/letter/o/cdc98d/32.png) [@Olle11](https://meta.discourse.org/u/Olle11)
#### Post date: [2025年四月1日 21:38 UTC](https://meta.discourse.org/t/animated-avatar/220445/58 "2025-04-01T21:38:36Z")

</div>

安装是否仍然存在错误？

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2025年四月1日 22:21 UTC](https://meta.discourse.org/t/animated-avatar/220445/59 "2025-04-01T22:21:15Z")

</div>

不，对我来说不是。

---

<div class="post-metadata">

### Author: ![Olle11](https://avatars.discourse-cdn.com/v4/letter/o/cdc98d/32.png) [@Olle11](https://meta.discourse.org/u/Olle11)
#### Post date: [2025年四月2日 17:00 UTC](https://meta.discourse.org/t/animated-avatar/220445/60 "2025-04-02T17:00:33Z")

</div>

你有没有试过不注释掉它就重新安装？

---

<div class="post-metadata">

### Author: ![Roi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/roi/32/130587_2.png) [@Roi](https://meta.discourse.org/u/Roi)
#### Post date: [2025年四月3日 18:19 UTC](https://meta.discourse.org/t/animated-avatar/220445/61 "2025-04-03T18:19:11Z")

</div>

我经常重建 Discourse。

我不确定几个月前的问题是什么。也许这当时也与 GeoIP 下载有关，后来该下载被更改为本地文件。

---

<div class="post-metadata">

### Author: ![featheredtoast](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/featheredtoast/32/116994_2.png) [@featheredtoast](https://meta.discourse.org/u/featheredtoast)
#### Post date: [2025年四月4日 06:12 UTC](https://meta.discourse.org/t/animated-avatar/220445/62 "2025-04-04T06:12:05Z")

</div>

说实话，我也不确定那是什么问题，那个脚本和报告的错误没有任何关系。

---

<div class="post-metadata">

### Author: ![akanora](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/akanora/32/575035_2.png) [@akanora](https://meta.discourse.org/u/akanora)
#### Post date: [2026年八月22日 19:35 UTC](https://meta.discourse.org/t/animated-avatar/220445/63 "2026-08-22T19:35:14Z")

</div>

你好，我在最新的 Discourse 版本（`v2026.8.0-latest.1`）上遇到了一个致命错误。

当用户尝试设置或更新个人资料图片时，前端会返回一个通用的 `422 (Unprocessable Content)` 错误，并且 Uppy 会记录一条网络警告。

查看 Sidekiq/Rails 日志后发现，该插件正在使 `UploadCreator` 流水线崩溃，因为它在当前的图像优化哈希中查找一个似乎缺失的 `resize_animated` 键。

以下是来自 `/logs` 的堆栈跟踪：

```plaintext
Job exception: key not found: "resize_animated"

/var/www/discourse/app/models/optimized_image.rb:336:in 'Hash#fetch'
/var/www/discourse/app/models/optimized_image.rb:336:in 'OptimizedImage.optimize'
/var/www/discourse/plugins/discourse-animated-avatars/lib/discourse_animated_avatars/optimized_image_extension.rb:9:in 'DiscourseAnimatedAvatars::OptimizedImageExtension::ClassMethods#resize_animated'
/var/www/discourse/plugins/discourse-animated-avatars/lib/discourse_animated_avatars/upload_creator_gifsicle_extension.rb:18:in 'DiscourseAnimatedAvatars::UploadCreatorGifsicleExtension#crop!'
/var/www/discourse/lib/upload_creator.rb:115:in 'block in UploadCreator#create_for'
```

如果需要其他日志，请告诉我！

---

<div class="post-metadata">

### Author: ![satonotdead](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/satonotdead/32/447830_2.png) [@satonotdead](https://meta.discourse.org/u/satonotdead)
#### Post date: [2026年八月24日 17:41 UTC](https://meta.discourse.org/t/animated-avatar/220445/64 "2026-08-24T17:41:15Z")

</div>

我已经安装并尝试使用 GIF 和 WebP 图片（尺寸在 200 像素以内），按理说这些图片不应该被缩放，但每次尝试都会出现 ``key not found: "resize\_animated

---

<div class="post-metadata">

### Author: ![Alteras](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/alteras/32/179824_2.png) [@Alteras](https://meta.discourse.org/u/Alteras)
#### Post date: [2026年八月25日 21:33 UTC](https://meta.discourse.org/t/animated-avatar/220445/65 "2026-08-25T21:33:30Z")

</div>

> [@akanora](#):
>
> 你好，我在最新版本的 Discourse（`v2026.8.0-latest.1`）上遇到了这个插件的致命错误。

> [@satonotdead](#):
>
> 我每次尝试都会收到 `key not found: "resize_animated"` 错误，而且一直无法让它正常工作。

感谢大家的 bug 报告！该 bug 仅影响 `v2026.8` 及更高版本。我已经推送了修复补丁，所以现在直接更新即可。

> <https://github.com/discourse/discourse-animated-avatars/commit/29784eee448ca72c52768e0246bba651bb038e4a>
>
> Due to discourse/discourse@5baa0d5, the available methods that \`OptimizedImage.o…ptimize\` could call was frozen. This commit decouples the \`resize\_animated\` instructions from relying on \`.optimize\`, calling the gifsicle instructions itself.

---

<div class="post-metadata">

### Author: ![akanora](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/akanora/32/575035_2.png) [@akanora](https://meta.discourse.org/u/akanora)
#### Post date: [2026年八月26日 02:36 UTC](https://meta.discourse.org/t/animated-avatar/220445/66 "2026-08-26T02:36:32Z")

</div>

感谢快速修复了 `resize_animated` 键错误。该问题已解决，并且我已更新到 `29784ee`（Discourse `v2026.9.0-latest`）。然而，我现在在设置/更新个人资料图片的同一代码路径中遇到了一个新的、不同的致命错误。

我认为 `--crop` 参数格式不正确。Gifsicle 期望的格式是 `--crop x,y+width+height`（或 `x,y-x2,y2`），但这里只有 `0,49+399`，即 `x,y` 对加上一个单独的 `+399`，完全缺少第二个 `+height` 组件。

 ![{D3F9E466-1B82-49C1-8630-9CA81DDE6B2B}](https://global.discourse-cdn.com/meta/original/4X/5/8/e/58e44a2cfb2bddb493fa2c6f2aa652ebad98a1ba.png)

 ![{4209F513-00E0-441B-83E3-8FF50E4D5517}](https://global.discourse-cdn.com/meta/original/4X/2/9/b/29b79577b7ba0bcd6c494c7e101a38c4ee960b0a.png)

```plaintext
app.js:367 ℹ️ Discourse v2026.9.0-latest — https://github.com/discourse/discourse/commits/ed9f07d9f5 — Ember v6.10.1
uppy-upload.js:503 POST https://btt.community/uploads.json?client_id=f57abab8b5c64413a953f6c839424130 422 (Unprocessable Content)
(anonymous) @ fetcher.js:83
await in (anonymous)
_ @ fetcher.js:17
(anonymous) @ fetcher.js:86
(anonymous) @ index.js:81
(anonymous) @ index.js:227
(anonymous) @ TaskQueue.js:45
#i @ TaskQueue.js:92
add @ TaskQueue.js:73
#uploadLocalFile @ index.js:218
(anonymous) @ index.js:316
#uploadFiles @ index.js:297
(anonymous) @ index.js:345
#runUpload @ Uppy.js:1413
await in #runUpload
upload @ Uppy.js:1521
(anonymous) @ Uppy.js:523
setTimeout
#f @ Uppy.js:521
addFiles @ Uppy.js:672
addFiles @ uppy-upload.js:503
_run @ index.js:804
_join @ index.js:783
join @ index.js:605
join @ index.js:152
(anonymous) @ index.js:250
(anonymous) @ uploads.js:411
n @ uploads.js:410
uppy-upload.js:503 [Uppy] [05:34:13] This looks like a network error, the endpoint might be blocked by an internet provider or a firewall.
(anonymous) @ loggers.js:7
log @ Uppy.js:1277
(anonymous) @ Uppy.js:970
r @ index.js:131
(anonymous) @ index.js:33
emit @ Uppy.js:110
(anonymous) @ index.js:134
await in (anonymous)
(anonymous) @ index.js:227
(anonymous) @ TaskQueue.js:45
#i @ TaskQueue.js:92
add @ TaskQueue.js:73
#uploadLocalFile @ index.js:218
(anonymous) @ index.js:316
#uploadFiles @ index.js:297
(anonymous) @ index.js:345
#runUpload @ Uppy.js:1413
await in #runUpload
upload @ Uppy.js:1521
(anonymous) @ Uppy.js:523
setTimeout
#f @ Uppy.js:521
addFiles @ Uppy.js:672
addFiles @ uppy-upload.js:503
_run @ index.js:804
_join @ index.js:783
join @ index.js:605
join @ index.js:152
(anonymous) @ index.js:250
(anonymous) @ uploads.js:411
n @ uploads.js:410

```

---

<div class="post-metadata">

### Author: ![satonotdead](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/satonotdead/32/447830_2.png) [@satonotdead](https://meta.discourse.org/u/satonotdead)
#### Post date: [2026年八月26日 13:50 UTC](https://meta.discourse.org/t/animated-avatar/220445/67 "2026-08-26T13:50:19Z")

</div>

感谢快速回复！我再次尝试使用动画 `webp` 图像，并看到了以下输出：

```plaintext
gifsicle --colors=256 --crop 0,0+200 --resize-fit 288x288 --optimize=3 --output /tmp/RackMultipartID.webp /tmp/RackMultipartID.webp

```

但图像仍然是 `png`。我是不是遗漏了什么？我特意强制刷新了浏览器以防万一，但非动画图像依然存在。

---

<div class="post-metadata">

### Author: ![akanora](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/akanora/32/575035_2.png) [@akanora](https://meta.discourse.org/u/akanora)
#### Post date: [2026年八月26日 17:31 UTC](https://meta.discourse.org/t/animated-avatar/220445/68 "2026-08-26T17:31:25Z")

</div>

我完全无法更改我的头像。我目前使用的是一张 GIF 格式的头像，我尝试用一张 PNG 格式的头像替换它，但系统弹出了提示框，并显示了我上一条消息中提到的错误，头像也没有被更换。

---

<div class="post-metadata">

### Author: ![satonotdead](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/satonotdead/32/447830_2.png) [@satonotdead](https://meta.discourse.org/u/satonotdead)
#### Post date: [2026年八月26日 17:46 UTC](https://meta.discourse.org/t/animated-avatar/220445/69 "2026-08-26T17:46:52Z")

</div>

我只是想表示，如果该插件需要任何更新，我很乐意随时帮忙测试，以便它再次被全面使用。

您可以通过任何您方便的方式联系我；我的时间很充裕，可以根据需要调整日程。

---

<div class="post-metadata">

### Author: ![Alteras](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/alteras/32/179824_2.png) [@Alteras](https://meta.discourse.org/u/Alteras)
#### Post date: [2026年八月26日 21:23 UTC](https://meta.discourse.org/t/animated-avatar/220445/70 "2026-08-26T21:23:26Z")

</div>

> [@akanora](#):
>
> 我试着把它换成 PNG 格式的个人头像，结果弹出了提示框并报错

> [@satonotdead](#):
>
> 我又试了一次，使用了一张动画 `webp` 图片，看到了以下输出：

看来我的修复暴露了一个隐藏的错误。我已在代码仓库中更新了另一个修复方案（并增加了更多测试）。Discourse `v2026.8` 及更高版本均受此影响。

> [@satonotdead](#):
>
> 但图片仍然是 `png` 格式。

致命错误和上传被阻止是一个 bug，现已修复。不过，目前尚不支持动画 WebP 图片。该插件最初是为 GIF 设计的，其他图片格式仍保持静态。未来可能会添加对动画 WebP（以及 APNG）的支持。

* * *

> <https://github.com/discourse/discourse-animated-avatars/commit/012466acda624efdfc980549e26cc7a057d73fef>
>
> This commit fixes a regression where non GIF files were processing through gifsi…cle. Previously, uploads would go through \`.optimize\`, which would silently catch these failures and pass on to imagemagick. Now we only let GIF files pass through gifsicle.
> 
> Also cleans up the gifsicle crop to use \`x1,y1+widthxheight\` input. Was previously relying on undocumented internal behavior in gifsicle to fallback from single input.
> 
> \---------
> 
> Co-authored-by: discourse-patch-triage\[bot\] \<272280883+discourse-patch-triage\[bot\]@users.noreply.github.com\>

---

<div class="post-metadata">

### Author: ![akanora](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/akanora/32/575035_2.png) [@akanora](https://meta.discourse.org/u/akanora)
#### Post date: [2026年八月26日 21:34 UTC](https://meta.discourse.org/t/animated-avatar/220445/71 "2026-08-26T21:34:25Z")

</div>

谢谢修复！我已经在我的实例上测试过了（已更新到 `012466a`），运行正常。我分别尝试了 `.png` 和 `.gif` 格式的头像，两者都没有报错。在我这边看起来没问题。

---

<div class="post-metadata">

### Author: ![satonotdead](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/satonotdead/32/447830_2.png) [@satonotdead](https://meta.discourse.org/u/satonotdead)
#### Post date: [2026年八月27日 19:31 UTC](https://meta.discourse.org/t/animated-avatar/220445/72 "2026-08-27T19:31:02Z")

</div>

我也感谢你的更新，并确认它在 GIF 格式下运行完美。

---

<div class="post-metadata">

### Author: ![Alteras](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/alteras/32/179824_2.png) [@Alteras](https://meta.discourse.org/u/Alteras)
#### Post date: [2026年九月10日 21:47 UTC](https://meta.discourse.org/t/animated-avatar/220445/73 "2026-09-10T21:47:28Z")

</div>

现已支持动画 WebP 格式，并附带了一些便捷工具！

新增 `animated_gif_avatar_to_webp` 设置，该设置会自动将动画 GIF 头像转换为 WebP 格式，从而大幅减小整体文件大小。此设置在上传时生效，因此现有的 GIF 头像将保持不变。

当启用 `animated_gif_avatar_to_webp` 时，不再需要 gifsicle 和 `install.sh` 钩子，因为新的 GIF 头像将以正确的比例/裁剪方式转换为 WebP。

管理员还可以使用 rake 任务 `bin/rake animated_avatars:gif_to_webp` 将现有的动画 GIF 头像转换为 WebP。所有正在使用的动画 GIF 头像都将被转换为 WebP，并以更小的文件大小替换原头像。

- [FEAT: add animated WebP support (#80) · discourse/discourse-animated-avatars@937aa3d · GitHub](https://github.com/discourse/discourse-animated-avatars/commit/937aa3d0a4a895f923e35286000b089fbc8d9395)
- [FEATURE: Auto-convert animated GIF avatars to WebP on upload · discourse/discourse-animated-avatars@760d1dc · GitHub](https://github.com/discourse/discourse-animated-avatars/commit/760d1dc24acef0878b3318784cbd6c8348f10bde)
- [DEV: Add rake tasks to count and migrate animated GIF avatars to WebP · discourse/discourse-animated-avatars@4e3313d · GitHub](https://github.com/discourse/discourse-animated-avatars/commit/4e3313d3d725ab1c7eb679df36f1c424a28de8b3)

[上一頁](https://meta.discourse.org/t/animated-avatar/220445.md?page=2)
