В первом цикле, в который вы загружаете изображения, вы также создаете новое пустое изображение и сохраняете это пустое изображение в decodedImages
.И затем вы перебираете эти пустые изображения и объединяете их.
Вместо этого вы должны сохранить загруженные изображения в decodedImages
:
for i, img := range images {
decodedImages[i] = openAndDecode("./imgs/" + img + ".png")
}
Чтобы это работало, объявите decodedImages
какфрагмент image.Image
(поскольку openAndDecode()
возвращает значение типа image.Image
):
var decodedImages = make([]image.Image, len(images))
Кроме того, всякий раз, когда вы открываете файл и проверяете ошибку, вы должны отложить его сразу послеесли последующий код завершится ошибкой, файл все равно закроется.
Также, чтобы «объединить» изображения с альфа-каналом, вы должны использовать оператор draw.Over
.Цитата из поста блога: The Go Blog: пакет изображений / изображений Go :
Оператор Over
выполняет естественное наложение исходного изображения на конечное изображение:изменение к целевому изображению меньше, когда источник (после маскировки) более прозрачен (то есть имеет более низкую альфу).Оператор Src
просто копирует источник (после маскировки), не обращая внимания на исходный контент конечного изображения.Для полностью непрозрачных изображений источника и маски оба оператора выдают одинаковый вывод, но оператор Src
обычно работает быстрее.