рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЬреЗрдкреАрдИрдЬреА рд╣реИ:
рдореИрдВ PNG рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
JPEG рдкрд░ рд╕реНрдерд┐рддрд┐ 128x128 рдкрд░ред
рдЬрдм рдХрд░ рд░рд╣реЗ рд╣реЛ
vips insert tile.jpg pin.png newimage.jpg 128 128
рдпрд╣ рдореБрдЭреЗ Error Output: insert: images must have the same number of bands, or one must be single-band
рдХреНрдпреЛрдВрдХрд┐ pin.jpg рдореЗрдВ рдПрдХ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдФрд░ рдЯрд╛рдЗрд▓ рд╣реИ редjpg рдирд╣реАрдВред
рдЗрд╕рд▓рд┐рдП рдореИрдВ jpg рдХреЛ png рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реВрдВ:
convert tile.jpg png32:tile.png
рдЕрдм рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЯрд╛рдЗрд▓ рд╣реИред рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХреЗ рд╕рд╛рде рднрд╛рд╖рд╛:
рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЕрдм рдлреЛрди рдХрд░рддрд╛ рд╣реВрдВ:
vips insert tile.png pin.png newimage.png 128 128
рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓реЗ:
рд╕рдореНрдорд┐рд▓рд┐рдд pin.png рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рд╕рдлреЗрдж рд╣реИред
рдореИрдВрдиреЗ vips insert --help-all
рдХреА рдЬрд╛рдБрдЪ рдХреА, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рд╣рд╛рдпрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рджреЛрдиреЛрдВ рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рд╣реИред рдореЗрд░реЗ рд╕рд╡рд╛рд▓:
insert
рдХрдорд╛рдВрдб рдкрд╛рд░рджрд░реНрд╢реА рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ?рдПрд▓рдЬреА
рдХреВрдЯ-рдХреВрдЯ рдХрд░ рднрд░рд╛ рд╣реБрдЖ
рдирдорд╕реНрдХрд╛рд░ @codecitizen ,
insert
рдмрд╣реБрдд рдирд┐рдореНрди рд╕реНрддрд░ рдХрд╛ рдСрдкрд░реЗрд╢рди рд╣реИ: рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЫрд╡рд┐ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рдКрдкрд░ рд░рдЦрддрд╛ рд╣реИ, рдпрд╣ рдХреЛрдИ рд╕рдореНрдорд┐рд╢реНрд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╡рд░реНрддрдорд╛рди рд▓рд┐рдмрд╡рд┐рдк рдореЗрдВ рдЖрдкрдХреЛ blend
рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде ifthenelse
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рднрдпрд╛рдирдХ рд╣реИ:
# get the alpha channel from the overlay
vips extract_band marker.png alpha.png 3 --n 1
# get RGB from the overlay
vips extract_band marker.png rgb.png 0 --n 3
# find the size of the overlay
width=$(vipsheader -f width marker.png)
height=$(vipsheader -f height marker.png)
# cut out an area the size of marker from the background
vips extract_area background.jpg bg.png 128 128 $width $height
# blend the marker on top of the chunk of background
vips ifthenelse alpha.png rgb.png bg.png blended.png --blend
# insert the blended image back into the background
vips insert background.jpg blended.png final.jpg 128 128
рдЗрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
libvips 8.6 рдореЗрдВ рдПрдХ рдлреИрдВрд╕реА рдирдпрд╛ composite
рдСрдкрд░реЗрдЯрд░ рд╣реИ рдЬреЛ рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдореНрдорд┐рд╢реНрд░рдг рдореЛрдбреЛрдВ рдХреЛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рддреБрдо рдХрд░ рд╕рдХрддреЗ рд╣реЛ:
vips composite "background.jpg marker.png" final.jpg 2
2
рдЕрд░реНрде over
рдорд┐рд╢реНрд░рдг рдореЛрдб рд╣реИред рдпрд╣ рд╕рднреА рдкреАрдбреАрдПрдл рдорд┐рд╢реНрд░рдг рдореЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдПрдХ рдпрд╛ рдПрдХ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдЗрд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
@jcupitt рд╣реЗ, рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ libvips 8.6 рдФрд░ vips composite
рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рджреВрд╕рд░реА рдЫрд╡рд┐ рдХрд╛ рд╕реНрдерд╛рди рдХреИрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред
рдЖрдк рдмрдбрд╝реА рдЫрд╡рд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд▓реЗ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рд░рдЪрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
width=$(vipsheader -f width background.jpg)
height=$(vipsheader -f height background.jpg)
vips embed marker.png overlay.png 128 128 $width $height
vips composite "background.jpg overlay.png" final.jpg 2
рдпрд╛ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХрд╛рдЯ рд▓реЗрдВ, рд░рдЪрдирд╛ рдХрд░реЗрдВ, рдлрд┐рд░ рд╡рд╛рдкрд╕ рдбрд╛рд▓реЗрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░)ред
рдРрд╕рд╛ рдХрд░рдирд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рд▓рдЧрддреА рд╣реИ, рд╢рд╛рдпрдж рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рддреНрд╡рд░рд┐рдд рдорджрдж рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЖрдк рдмрдбрд╝реА рдЫрд╡рд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд▓реЗ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рд░рдЪрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдпрд╛ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХрд╛рдЯ рд▓реЗрдВ, рд░рдЪрдирд╛ рдХрд░реЗрдВ, рдлрд┐рд░ рд╡рд╛рдкрд╕ рдбрд╛рд▓реЗрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░)ред
рдРрд╕рд╛ рдХрд░рдирд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рд▓рдЧрддреА рд╣реИ, рд╢рд╛рдпрдж рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред