ComfyUI_essentials>๐Ÿ”ง Image Composite
ComfyUI_essentials
ๆ—ถ้—ด๏ผš2025/09/12

๐Ÿ”ง Image Composite

ๅฐ†ๆบๅ›พ (source) ๆŒ‰ๆŒ‡ๅฎšๅๆ ‡ (x, y) ๅ’Œๅ็งป้‡ (offset_x, offset_y) ๅˆๆˆๅˆฐ็›ฎๆ ‡ๅ›พ (destination) ไธŠ๏ผŒๅนถๆ”ฏๆŒ mask ่ฟ›่กŒ้ƒจๅˆ†ๅŒบๅŸŸๆททๅˆ๏ผŒ่€Œไธๆ˜ฏๅฎŒๅ…จๆ›ฟๆขใ€‚
๐Ÿ”ง Image Composite-่Š‚็‚นๅ‚ๆ•ฐ่ฏดๆ˜Ž
่พ“ๅ…ฅๅ‚ๆ•ฐ
destinationๅฟ…้กปๅ‚ๆ•ฐ,ไผ ๅ…ฅ็›ฎๆ ‡ๅ›พๅƒ๏ผŒๅฐ†ไฝœไธบๅบ•ๅ›พ่ขซ source ่ฆ†็›–ใ€‚้€šๅธธไธบ็บฏ่‰ฒ่ƒŒๆ™ฏๅ›พใ€‚
sourceๅฟ…้กปๅ‚ๆ•ฐ,ไผ ๅ…ฅๆบๅ›พ๏ผŒไผšๆŒ‰็…งๅๆ ‡่ฆ†็›–็›ฎๆ ‡ๅ›พใ€‚
maskๅฏ้€‰ๅ‚ๆ•ฐ, ๆŽฉ็ ๅ›พๅƒ๏ผŒ็™ฝ่‰ฒ่กจ็คบ source ่ขซๅบ”็”จๅŒบๅŸŸ๏ผŒ้ป‘่‰ฒไฟ็•™ destination ๅŽŸๅ›พๅƒใ€‚
่พ“ๅ‡บๅ‚ๆ•ฐ
IMAGEๅˆๆˆๅŽ็š„ๅ›พๅƒ๏ผŒ
ๆŽงไปถๅ‚ๆ•ฐ
xๆบๅ›พๅƒๅœจ็›ฎๆ ‡ๅ›พๅƒไธญ็š„ X ๅ็งปไฝ็ฝฎ๏ผŒๅ•ไฝไธบๅƒ็ด ใ€‚ๅณ source ๅทฆไธŠ่ง’ๅœจ destination ๅ›พๅƒไธญ็š„ๆจชๅ‘ๅ็งปไฝ็ฝฎ๏ผŒ่‹ฅ่ถ…ๅ‡บ่Œƒๅ›ดๅˆ™ๅฏ่ƒฝ่ขซ่ฃๅˆ‡ใ€‚
yๆบๅ›พๅƒๅœจ็›ฎๆ ‡ๅ›พๅƒไธญ็š„ Y ๅ็งปไฝ็ฝฎ๏ผŒๅ•ไฝไธบๅƒ็ด ใ€‚ๅณ source ๅทฆไธŠ่ง’ๅœจ destination ๅ›พๅƒไธญ็š„็บตๅ‘ๅ็งปไฝ็ฝฎใ€‚่ถ…ๅ‡บ destination ไผš่ขซๅฟฝ็•ฅๆˆ–่ฃๅˆ‡ใ€‚
offset_xๅ…จๅฑ€ๅ็งป้‡,ไผšๅœจx็š„ๅŸบ็ก€ไธŠๅ†ๅŠ ไธŠ่ฟ™ไธชoffset_x็š„ๅ€ผ
offset_yๅ…จๅฑ€ๅ็งป้‡,ไผšๅœจy็š„ๅŸบ็ก€ไธŠๅ†ๅŠ ไธŠ่ฟ™ไธชoffset_y็š„ๅ€ผ
ๅˆ†ๅˆซๅฑ•็คบไบ†x,y,offset_x,offset_yไปฅๅŠไผ ๅ…ฅMASKๅŽ็š„ๆ•ˆๆžœ

ไผ ๅ…ฅไบ†MASKๅŽไผšๅšๅฏนsourceๅ›พๅƒๅšresizeๅค„็†ใ€‚

ๆบ็ ๆˆชๅ–๏ผš

        if mask.shape[1:3] != source.shape[1:3]:
            mask = F.interpolate(mask.permute([0, 3, 1, 2]), size=(source.shape[1], source.shape[2]), mode='bicubic')
            mask = mask.permute([0, 2, 3, 1])

ๅนฟๅ‘Š

ๅฏๅŠ ๅ…ฅ็Ÿฅ่ฏ†ๆ˜Ÿ็ƒ่Žทๅ–ๆ‰€ๆœ‰็คบไพ‹ๅทฅไฝœๆต

ๅนฟๅ‘Š

ๅพฎไฟกๆ‰ซ็ ๅ…ฅ็พค๏ผŒๅŠ ๅ…ฅAIGCๅคงๅฎถๅบญ๏ผŒไธŽๅคงๅฎถไธ€่ตทไบคๆตๅญฆไน