Libvips: JPEG рдкрд░ рдкрд╛рд░рджрд░реНрд╢реА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд╕рд╛рде PNG рдбрд╛рд▓реЗрдВ - рд╡реНрд╣рд╛рдЗрдЯ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдЕрдХреНрддреВре░ 2017  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: libvips/libvips

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЬреЗрдкреАрдИрдЬреА рд╣реИ:

tile

рдореИрдВ PNG рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

pin

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    

рдЕрдм рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЯрд╛рдЗрд▓ рд╣реИред рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХреЗ рд╕рд╛рде рднрд╛рд╖рд╛:
tile

рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЕрдм рдлреЛрди рдХрд░рддрд╛ рд╣реВрдВ:

vips insert tile.png pin.png newimage.png 128 128

рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓реЗ:
inserted

рд╕рдореНрдорд┐рд▓рд┐рдд pin.png рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рд╕рдлреЗрдж рд╣реИред

рдореИрдВрдиреЗ vips insert --help-all рдХреА рдЬрд╛рдБрдЪ рдХреА, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рд╣рд╛рдпрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рджреЛрдиреЛрдВ рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рд╣реИред рдореЗрд░реЗ рд╕рд╡рд╛рд▓:

  • рдХреНрдпрд╛ libvips insert рдХрдорд╛рдВрдб рдкрд╛рд░рджрд░реНрд╢реА рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ?
  • рдпрджрд┐ рд╣рд╛рдБ: рдХреНрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ?
  • ... рдпрд╛ рд╢рд╛рдпрдж рдореИрдВ рдпрд╣рд╛рдБ рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ?

рдПрд▓рдЬреА
рдХреВрдЯ-рдХреВрдЯ рдХрд░ рднрд░рд╛ рд╣реБрдЖ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЖрдк рдмрдбрд╝реА рдЫрд╡рд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд▓реЗ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд┐рд░ рд░рдЪрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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

рдпрд╛ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХрд╛рдЯ рд▓реЗрдВ, рд░рдЪрдирд╛ рдХрд░реЗрдВ, рдлрд┐рд░ рд╡рд╛рдкрд╕ рдбрд╛рд▓реЗрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░)ред

рдРрд╕рд╛ рдХрд░рдирд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рд▓рдЧрддреА рд╣реИ, рд╢рд╛рдпрдж рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдирдорд╕реНрдХрд╛рд░ @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 

рдЗрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

final

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

рдпрд╛ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХрд╛рдЯ рд▓реЗрдВ, рд░рдЪрдирд╛ рдХрд░реЗрдВ, рдлрд┐рд░ рд╡рд╛рдкрд╕ рдбрд╛рд▓реЗрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░)ред

рдРрд╕рд╛ рдХрд░рдирд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рд▓рдЧрддреА рд╣реИ, рд╢рд╛рдпрдж рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рддреНрд╡рд░рд┐рдд рдорджрдж рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

nattfodd picture nattfodd  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

harukizaemon picture harukizaemon  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Kyle-Kyle picture Kyle-Kyle  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sonylifull picture sonylifull  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

helloqhx picture helloqhx  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ