Просто расширите свое изображение RGB до RGBA, установив для A значение «1»:
rgba = np.dstack((rgb, np.ones(rgb.shape[:-1])))
, а затем используйте упомянутый вами метод композиции.
Если вы используете Подушку , вместо этого вы можете просто использовать:
imRGB.putalpha(alpha)
composite = PIL.Image.alpha_composite(imRGB, im2RGBA)
Это в ответ на комментарий выше. Я не могу отправить полный код, но это в основном, как мой поставщик работает.
Предположим, что у Вас есть страница article.aspx, и она использует параметр строки запроса "идентификатор", чтобы получить и отобразить заголовок статьи и тело. Затем это находится в Web.sitemap:
<siteMapNode url="/article.aspx" title="(this will be replaced)" param="id" />
Затем Вы создаете этот класс:
public class DynamicSiteMapPath : SiteMapPath
{
protected override void InitializeItem(SiteMapNodeItem item)
{
if (item.ItemType != SiteMapNodeItemType.PathSeparator)
{
string url = item.SiteMapNode.Url;
string param = item.SiteMapNode["param"];
// get parameter value
int id = System.Web.HttpContext.Current.Request.QueryString[param];
// retrieve article from database using id
<write your own code>
// override node link
HyperLink link = new HyperLink();
link.NavigateUrl = url + "?" + param + "=" + id.ToString();
link.Text = <the article title from the database>;
link.ToolTip = <the article title from the database>;
item.Controls.Add(link);
}
else
{
// if current node is a separator, initialize as usual
base.InitializeItem(item);
}
}
}
Наконец, Вы используете этого поставщика в своем коде точно так же, как Вы использовали бы статического поставщика.
<mycontrols:DynamicSiteMapPath ID="dsmpMain" runat="server" />
Мой класс более сложен, чем это, но это основы. Вместо того, чтобы использовать querystring параметр, Вы могли просто проанализировать дружественный URL, который Вы используете, и использование что вместо этого получить корректное содержание. Для уменьшения дополнительных поисков дб с каждым запросом можно добавить механизм кэширования к поставщику (заголовок статьи обычно не будет часто изменяться).
Надеюсь, это поможет.
Это - не полностью ответ на Ваш вопрос, я думаю, но возможно он дает Вам общее представление. Я однажды записал наследованию класса DynamicSiteMapPath SiteMapPath. Я использую пользовательский атрибут в каждом <siteMapNode>
тег в Web.sitemap, как это:
<siteMapNode url="dynamicpage.aspx" title="blah" params="id" />
Затем класс DynamicSiteMapPath получает "идентификационное" значение параметра, получает содержание от базы данных и переопределяет в настоящее время представляемый узел объекта карты сайта с корректным заголовком и ссылкой. Это собирается брать немного работы, но при корректном выполнении это - очень аккуратный способ оказать динамическую поддержку страницы.