لدي ملف JPEG:
أرغب في إدراج ملف PNG:
في الموضع 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 مع قناة ألفا:
لكن عندما اتصل الآن:
vips insert tile.png pin.png newimage.png 128 128
أحصل على ما يلي:
خلفية الدبوس المدرج بيضاء.
لقد راجعت vips insert --help-all
ولكن لم أجد بالفعل معلمة سطر أوامر مفيدة. كلتا الصورتين لهما قناة ألفا. أسئلتي:
insert
خلفية شفافة؟ال جي
الترميز
مرحبا 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
لتوليد هذا:
يحتوي 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
أو قص جزءًا من الخلفية ، وقم بتكوينه ، ثم أدخله مرة أخرى (على النحو الوارد أعلاه).
يبدو أن هذا أمر شائع يجب القيام به ، ربما يجب أن يكون هناك خيار لتحديد المركز.
رائع! شكرا جزيلا للمساعدة السريعة!
التعليق الأكثر فائدة
يمكنك تكبير التراكب لمطابقة الصورة الكبيرة ، ثم إنشاء:
أو قص جزءًا من الخلفية ، وقم بتكوينه ، ثم أدخله مرة أخرى (على النحو الوارد أعلاه).
يبدو أن هذا أمر شائع يجب القيام به ، ربما يجب أن يكون هناك خيار لتحديد المركز.