(Уменьшен размер, чтобы не занимать здесь так много места. Исходный размер: 360x1200). Также обратите внимание, что на самом деле я не использую файл Blank.png — он просто существует, чтобы я мог проверить, используется он или нет. Я создаю простой цветной блок в виде «blank.png».

Мой код:
Код: Выделить всё
using (MagickImageCollection images = new MagickImageCollection())
{
List lFiles = new List();
lFiles.Add(@"C:\Users\David\Pictures\1.jpg");
lFiles.Add(@"C:\Users\David\Pictures\blank.png");
lFiles.Add(@"C:\Users\David\Pictures\blank.png");
lFiles.Add(@"C:\Users\David\Pictures\blank.png");
lFiles.Add(@"C:\Users\David\Pictures\blank.png");
IMagickImage roundImg = new MagickImage();
IMagickImage mask = new MagickImage();
IMagickImage shadow = new MagickImage();
IMagickImage result = new MagickImage();
bool isBlankImage = false;
foreach (string tempFBProfileImg in lFiles)
{
roundImg = new MagickImage(tempFBProfileImg);
if (Regex.IsMatch(@"C:\Users\David\Pictures\blank.png", @"\bblank.png\b"))
{
roundImg = new MagickImage(MagickColors.White, 100, 100);
roundImg.Resize(100, 100);
roundImg.Transparent(MagickColors.White);
}
else
{
mask = new MagickImage("xc:black", 100, 100);
mask.Settings.FillColor = MagickColors.White;
mask.Draw(new DrawableCircle(50, 50, 50, 90));
mask.HasAlpha = false;
roundImg.Resize(100, 100);
roundImg.Composite(mask, CompositeOperator.CopyAlpha);
roundImg.Draw(
new DrawableStrokeColor(MagickColors.Black),
new DrawableStrokeWidth(1),
new DrawableFillColor(MagickColors.None),
new DrawableCircle(50, 50, 50, 90)
);
shadow = new MagickImage("xc:none", 100, 100);
shadow.Settings.FillColor = MagickColors.Black;
shadow.Draw(new DrawableCircle(50, 50, 50, 90));
shadow.Blur(0, 5);
roundImg.Composite(shadow, CompositeOperator.DstOver);
}
images.Add(roundImg);
images.First().BackgroundColor = MagickColors.None;
result = images.SmushHorizontal(-35);
result.Resize(360, 0);
result.Write(@"C:\Users\David\Pictures\final.png");
}
}
Я получаю следующую ошибку:
'ширина или высота превышает предел `#FFFFFFFFFFFF' @ error/cache.c/OpenPixelCache/3491'
на result.Write(@"C:\Users\David\Pictures\final.png"); строку.
Когда у меня работает только этот код:
Код: Выделить всё
MagickImage roundImg = new MagickImage(MagickColors.White, 100, 100);
roundImg.Resize(100, 100);
roundImg.Transparent(MagickColors.White);
roundImg.Write(@"C:\Users\David\Pictures\aloneTest.png");

Как я могу заставить это работать, поскольку оно мне тоже нужно?
Использованные изображения:

Blank.png start ----

Blank.png end ----
Что я я хочу, чтобы оно выглядело так:

что на самом деле выглядит так, поскольку файл Blank.png прозрачный:

Ширина будет разной в зависимости от того, сколько пустых изображений в формате png необходимо вставить, чтобы получить такую ширину. В приведенном выше примере 5 изображений, 4 из которых пустые.
Использование примера Bonzos на C#:
Код: Выделить всё
roundImg.Resize(new MagickGeometry(100, 100));
roundImg.BackgroundColor = MagickColors.Transparent;
roundImg.Extent(360, 100, Gravity.West);
result = roundImg;
Пробовал fmw42:
Код: Выделить всё
mask = new MagickImage("xc:black", 100, 100);
mask.Settings.FillColor = MagickColors.White;
mask.Draw(new DrawableCircle(50, 50, 50, 100));
mask.HasAlpha = false;
mask.Resize(100, 100);
roundImg.Composite(mask, CompositeOperator.CopyAlpha);
Код: Выделить всё
if (Regex.IsMatch(tempFBProfileImg.ToLower(), @"\bblank.png\b"))
{
result.Extent(360, 100, Gravity.West);
images.Add(result);
break;
}

Подробнее здесь: https://stackoverflow.com/questions/494 ... g-to-width
Мобильная версия