I decided to experiment a bit with the new PIL library. But during the experiment, a problem arose - you need a monotonous background ... For example, this one
...overlay a wave image with a TRANSPARENT background ...
I tried to do it like this:
from PIL import Image
import random as rm
bodyColorListDir = 'C:/Users/Home/Documents/neutral-cubes/body-color/'
bodyColor_list = ['1.png', '2.png', '3.png', '4.png', '5.png', '6.png', '7.png',
'8.png', '9.png', '10.png', '11.png', '12.png', '13.png', '14.png', '15.png',
'16.png', '17.png', '18.png', '19.png', '20.png', '21.png', '22.png', '23.png',
'24.png', '25.png', '26.png', '27.png', '28.png', '29.png', '30.png', '31.png',
'32.png', '33.png', '34.png', '35.png', '36.png', '37.png', '38.png', '39.png',
'40.png', '41.png', '42.png', '43.png', '44.png', '45.png', '46.png', 'secret.png']
wave_img = "C:/Users/Home/Downloads/imgonline-com-ua-Resize-jjS2xs50sS04g.png"
wave_number = 0
for bodyColor in bodyColor_list:
wave_number += 1
img = Image.open(bodyColorListDir + bodyColor)
wave = Image.open(wave_img)
img.save('C:/Users/Home/Documents/neutral-cubes/tempes/wave' + str(wave_number) + '.png')`
However, this results in the images being saved with only the original background.
How to fix it?
I also tried this code:
from PIL import Image
import random as rm
bodyColorListDir = 'C:/Users/Home/Documents/neutral-cubes/body-color/'
bodyColor_list = ['1.png', '2.png', '3.png', '4.png', '5.png', '6.png', '7.png',
'8.png', '9.png', '10.png', '11.png', '12.png', '13.png', '14.png', '15.png',
'16.png', '17.png', '18.png', '19.png', '20.png', '21.png', '22.png', '23.png',
'24.png', '25.png', '26.png', '27.png', '28.png', '29.png', '30.png', '31.png',
'32.png', '33.png', '34.png', '35.png', '36.png', '37.png', '38.png', '39.png',
'40.png', '41.png', '42.png', '43.png', '44.png', '45.png', '46.png', 'secret.png']
wave_img = "C:/Users/Home/Downloads/imgonline-com-ua-Resize-jjS2xs50sS04g.png"
wave_number = 0
for bodyColor in bodyColor_list:
wave_number += 1
img = Image.open(bodyColorListDir + bodyColor)
wave = Image.open(wave_img)
Image.Image.paste(wave, None, (1000, 1000), None)
img.save('C:/Users/Home/Documents/neutral-cubes/tempes/wave' + str(wave_number) + '.png')`
But this did not work either, moreover, an error appeared:
Traceback (most recent call last):
File "C:\Users\Home\PycharmProjects\mainProject\KiGAN.py", line 17, in <module>
Image.Image.paste(wave, None, (1000, 1000), None)
File "C:\Users\Home\PycharmProjects\mainProject\venv\Lib\site-packages\PIL\Image.py", line 1644, in paste
raise ValueError("cannot determine region size; use 4-item box")
ValueError: cannot determine region size; use 4-item box
You have to convert your image in RGBA mode ( because you have a foreground with transparent zones) I centered the foreground image, too.
from PIL import Image
bodyColorListDir = './'
bodyColor_list = ['1.png']
wave_img = "./wave.jpg"
wave_number = 0
for bodyColor in bodyColor_list:
wave_number += 1
# Load background image
img = Image.open(bodyColorListDir + bodyColor)
# Convert image to RGBA
img = img.convert("RGBA")
# Load foreground image
wave = Image.open(wave_img)
# Convert image to RGBA
wave = wave.convert("RGBA")
# Find the point where paste the foreground.
# coordinates can be negative if foreground size is larger than background
img_width=img.width
img_height=img.height
wave_width=wave.width
wave_height=wave.height
position_paste=(int((img_width-wave_width)/2),int((img_height-wave_height)/2))
# Paste the frontImage at (width, height)
img.paste(wave, position_paste, wave)
# Save the image
img.save("./wave" + str(wave_number) + ".png")