北京市朝阳区西大望路甲12号2号楼(国家广告产业园区孵化器26280号) 18913891292 zgenrenyouxi@j9.com

新闻动态

裁掉透明边缘后怎样让图片原地不动:六张素材的裁剪锚点保持(实例22)

2026-11-07

把图片透明边缘裁去会改变局部坐标原点。如果仍沿用原来的锚点坐标,图像就可能在屏幕上偏移。正确处理需要同时调整裁剪起点与锚点。

先固定规则与数据

源图中非透明像素坐标已给定,裁剪框取它们的最小包围矩形,右下边界不包含。新锚点等于原锚点减去裁剪左上坐标;绘制时仍让锚点对齐同一个世界位置。

六张独立小图;像素坐标为整数,除列出的像素外均透明。

逐项记录过程

图片1尺寸[18, 17],原锚点[-3, 13],世界锚位[10, 66],非透明像素[(3, 8), (7, 2), (7, 8), (15, 8), (17, 16)]。裁剪框[3, 2, 18, 17],新锚点[-6, 11],新绘制原点[16, 55],像素世界位置[[16, 61], [20, 55], [20, 61], [28, 61], [30, 69]]。

图片2尺寸[18, 15],没有非透明像素,跳过绘制,不创建虚假的一像素裁剪框。

图片3尺寸[17, 14],原锚点[19, 3],世界锚位[8, 10],非透明像素[(0, 10), (1, 6), (9, 4), (10, 10), (13, 0)]。裁剪框[0, 0, 14, 11],新锚点[19, 3],新绘制原点[-11, 7],像素世界位置[[-11, 17], [-10, 13], [-2, 11], [-1, 17], [2, 7]]。

图片4尺寸[12, 19],原锚点[13, 15],世界锚位[92, 21],非透明像素[(0, 0), (0, 13), (3, 16), (7, 2)]。裁剪框[0, 0, 8, 17],新锚点[13, 15],新绘制原点[79, 6],像素世界位置[[79, 6], [79, 19], [82, 22], [86, 8]]。

图片5尺寸[14, 19],原锚点[5, 9],世界锚位[-14, 75],非透明像素[(0, 6), (0, 8), (2, 5), (8, 8), (10, 12), (13, 4)]。裁剪框[0, 4, 14, 13],新锚点[5, 5],新绘制原点[-19, 70],像素世界位置[[-19, 72], [-19, 74], [-17, 71], [-11, 74], [-9, 78], [-6, 70]]。

图片6尺寸[11, 8],原锚点[2, 0],世界锚位[66, 0],非透明像素[(1, 4), (2, 4), (3, 0), (3, 5), (6, 6)]。裁剪框[1, 0, 7, 7],新锚点[1, 0],新绘制原点[65, 0],像素世界位置[[65, 4], [66, 4], [67, 0], [67, 5], [70, 6]]。

裁掉左侧和上侧空白时,新锚点可能变成负数,这仍可正确表示图像与世界锚位的关系。检查最终像素位置比只看锚点是否落在图片里更可靠。

独立复核的方法

逐个检查原图像素与裁剪后像素的世界坐标相同。锚点可以在裁剪框外,不应为了让数值看起来漂亮就强行限制进框内。若没有任何非透明像素,本例跳过绘制。

建议先按原始数据自己算一遍,保留中间状态后再与本例对照。发生分歧时,先寻找最早不同的步骤,检查边界是否包含、编号与坐标方向是否一致,以及状态是在事件之前还是之后更新。最终结果相同并不能替代对过程规则的理解,修改输入后也需要重新核算。

使用范围

这里不考虑旋转、缩放和纹理过滤,只追踪平移与像素坐标。真实素材还可能保留碰撞框、九宫格边距或其他元数据,裁剪这些素材时需要分别维护它们的坐标关系。