本地资源加载后,设置sizemode、trim是立即生效的,但是加载远程资源,无论怎么设置sizemode、trim都是没效果的。
加载远程图片,即使sizemode为1,trim为true,node的宽高依然是没有裁剪的原始宽高。求大神指点.

默认sizemode为1,trim为true,图片并没有被裁剪,下面屏蔽的是本地图片,加载完之后是裁剪的效果
现在都2021了,2.4版本还是这样。。。。
请问解决了嘛
好像还是不行。不过打进图集是可以的
2023年了,这个还是不行 
这个问题还没解决吗
猜测一波:本地资源,是由编辑器计算的 trim 数据, 存储的 spriteFrame 里面的,远程加载的图片,引擎内没有计算图片 trim 数据的功能,所以是原始大小。
26年了。。。
用Claude写了个方法浏览器可行
private static createTrimmedSF(texture: cc.Texture2D, cb: (sf: cc.SpriteFrame) => void): void {
const w = texture.width;
const h = texture.height;
const fallback = () => cb(new cc.SpriteFrame(texture));
try {
const img = (texture as any)._image || (texture as any).image;
if (!img) return fallback();
const canvas = document.createElement(‘canvas’);
canvas.width = w;
canvas.height = h;
const ctx = canvas.getContext(‘2d’);
ctx.drawImage(img, 0, 0);
const data = ctx.getImageData(0, 0, w, h).data;
let minX = w, minY = h, maxX = 0, maxY = 0;
for (let y = 0; y < h; y++) {
for (let x = 0; x < w; x++) {
if (data[(y * w + x) * 4 + 3] > 0) {
if (x < minX) minX = x;
if (y < minY) minY = y;
if (x > maxX) maxX = x;
if (y > maxY) maxY = y;
}
}
}
if (maxX < minX) return fallback();
const trimW = maxX - minX + 1;
const trimH = maxY - minY + 1;
const sf = new cc.SpriteFrame();
sf.setTexture(texture);
sf.setRect(new cc.Rect(minX, minY, trimW, trimH));
sf.setOriginalSize(cc.size(w, h));
// 编辑器计算 offset 的方式:trimmed 中心相对 original 中心的偏移(Y轴翻转)
sf.setOffset(cc.v2(
minX + trimW / 2 - w / 2,
h / 2 - (minY + trimH / 2)
));
cb(sf);
} catch (e) {
fallback();
}
}