Как создавать фрагменты изображений с помощью Magick.NET или GraphicsMagick.NET

Я использую ImageMagick в CLI следующим образом:

gm convert input.png -crop 512x512 +repage +adjoin "tiles/tile%02d.png"

чтобы создать мозаичную версию моего входного изображения. Но я хочу сделать это с помощью GraphicsMagick.NET или Magick.NET вместо использования командной строки. Проблема, с которой я столкнулся, заключается в том, что ни GM.NET, ни IM.NET не поддерживают должным образом "+repage" и "+adjoin". Вместо этого оба генерируют только одно выходное изображение.

Я попробовал следующий код на С#, но безуспешно.

Тест GraphicsMagick.NET

MagickImage image = new MagickImage("test.png");
MagickGeometry geo = new MagickGeometry(512,512);

image.Crop(geo);
image.RePage();
image.Adjoin = true; // i tried false too! 
image.Write("testout_%d.png");

Тест ImageMagick.NET

// ImageMagick.NET Test
using (MagickImage image = new MagickImage("test.png"))
{
   image.Crop(512, 512,Gravity.Northwest);
   image.RePage();
   image.Adjoin = true;
   image.Write("testout_%d.png");
}

Я также попробовал MSL для создания мозаичной версии моего изображения, но MSL, похоже, тоже не поддерживает это, в MSL полностью отсутствуют как adjoin, так и repage.


person parceval    schedule 28.10.2014    source источник


Ответы (1)


Опция обрезки вызывает другой код, чем вы ожидаете. Обрезка изображения на плитки в настоящее время поддерживается только Magick.NET. Ниже приведен пример того, как вы можете это сделать.

using (MagickImage image = new MagickImage("test.png"))
{
  int i = 0;
  foreach (MagickImage tile in image.CropToTiles(512, 512))
  {
    tile.Write("testout_" + (i++) + ".png");
  }
}

P.S. И adjoin, и rePage поддерживаются MagickScript (MSL).

person dlemstra    schedule 28.10.2014