You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为8倍放大的Sprite添加像素间填充或叠加网格?

为放大后的Sprite添加像素间距/网格的实现方法

我需要将小型Mario Sprite放大8倍,同时在放大后的每个原像素块(8x8大小)之间添加1像素的间距,或者在放大后的图像上叠加网格。目前已有的基础放大命令是:

convert -scale 800% -quality 100 mario.png mario-big.png

原始Sprite可通过以下命令生成:

# mario sprite in base64 writing to file:
magick 'inline:data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAA7EAAAO
xAGVKw4bAAAA00lEQVQ4ja1UwRGDMAyTe7zLJmWUzMoodBO6gHmkhsRWcukVvYID
kiKbiKoqbsTjTjIAmLq7IvXzwGHahJ5sUKBJKKhf3rcVAPB8pZ5BTihyEcxLomuD
Fxhqyryk06WtDZ93LSB+bMqYvBtPBsQYA2FP3YPl2XUIAIpcsCZ5eRM18slvALyL
CoFAu5EApCn7tsbx+hY0U55llmkYG7NefuhzKAVFUv1Mm8L+EgKWa5zDQbIWqiNn
riuvID8g1r4c2Hi6Ghvg6sg/mqEIDv+9v2+/sQ8vtmAvY/Wf0QAAAABJRU5ErkJg
gg==' mario.png

方法一:给像素块添加空白间距

该方法会在每个8x8的像素块之间插入1像素的空白,让块与块彻底分开,命令如下:

# 先获取原始图像尺寸,再放大并绘制分隔线
W=$(identify -format %w mario.png)
H=$(identify -format %h mario.png)

convert mario.png -scale 800% -quality 100 \
  -fill white -stroke white -strokewidth 1 \
  $(for ((x=8; x<8*W; x+=9)); do echo "-draw 'line $x,0 $x,$((8*H))'"; done) \
  $(for ((y=8; y<8*H; y+=9)); do echo "-draw 'line 0,$y $((8*W)),$y'"; done) \
  mario-big-with-gap.png
  • 核心逻辑:先将原图放大8倍,再在每个原像素块的边缘位置(每8像素偏移1像素)绘制1像素宽的线条,实现块间分隔。
  • 可将white替换为你需要的背景色,比如black。

方法二:叠加网格线

如果只需要在放大后的图像上叠加网格(不改变块的位置,仅添加线条),可以用更简洁的命令:

convert mario.png -scale 800% -quality 100 \
  -stroke white -strokewidth 1 -fill none \
  -draw "for x from 8 to %w step 8 rectangle x,0 x+1,%h" \
  -draw "for y from 8 to %h step 8 rectangle 0,y %w,y+1" \
  mario-big-with-grid.png
  • 核心逻辑:利用ImageMagick内置循环,每隔8像素绘制1像素宽的垂直线和水平线,形成覆盖整个图像的网格。
  • 可修改white为其他对比色,调整strokewidth参数可改变网格线的粗细。

内容的提问来源于stack exchange,提问作者PedroSangre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:49:16