Libvips: أدخل PNG بخلفية شفافة على JPEG - الحصول على خلفية بيضاء

تم إنشاؤها على ٢٥ أكتوبر ٢٠١٧  ·  4تعليقات  ·  مصدر: libvips/libvips

لدي ملف JPEG:

tile

أرغب في إدراج ملف PNG:

pin

في الموضع 128x128 على JPEG.

عندما تفعل

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    

الآن لدي بلاطة. png مع قناة ألفا:
tile

لكن عندما اتصل الآن:

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

أحصل على ما يلي:
inserted

خلفية الدبوس المدرج بيضاء.

لقد راجعت vips insert --help-all ولكن لم أجد بالفعل معلمة سطر أوامر مفيدة. كلتا الصورتين لهما قناة ألفا. أسئلتي:

  • هل يدعم أمر libvips insert خلفية شفافة؟
  • إذا كانت الإجابة بنعم: هل يمكن لأحد أن يرشدني إلى كيفية استخدام هذه الميزة بعد ذلك؟
  • ... أو ربما أفعل شيئًا خاطئًا هنا؟

ال جي
الترميز

question

التعليق الأكثر فائدة

يمكنك تكبير التراكب لمطابقة الصورة الكبيرة ، ثم إنشاء:

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 عملية منخفضة المستوى للغاية: فهي تضع صورة واحدة فوق الأخرى ، ولا تقوم بأي مزج.

في libvips الحالية ، تحتاج إلى استخدام ifthenelse مع الخيار blend . إنه أمر مروع للغاية:

# 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 . وهو يدعم جميع أوضاع مزيج PDF. يجب أن يخرج في غضون أسبوع أو نحو ذلك.

jcupitt مرحبًا ، شكرًا. لقد قمت بتثبيت 8.6 libvips و 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 التقييمات

القضايا ذات الصلة

kloczek picture kloczek  ·  3تعليقات

felixbuenemann picture felixbuenemann  ·  4تعليقات

helloqhx picture helloqhx  ·  3تعليقات

nattfodd picture nattfodd  ·  5تعليقات

harukizaemon picture harukizaemon  ·  4تعليقات