ImageMagick API-导出方向正确的像素

ImageMagick API-导出方向正确的像素,imagemagick,magickwand,Imagemagick,Magickwand,我一直在使用此方法使用MagickWand API导出像素: MagickExportImagePixels 但是,这似乎不符合图像中exif数据的方向。还有没有办法提取正确方向的像素,这样我就可以用不同的格式写出它们(不使用MagickWriteImage)?基本上,我想要转换的自动定向选项的行为 谢谢 看起来唯一的方法是通过获取图像方向并相应地旋转图像来进行伪手动操作。这并不难,但我希望API中内置一个更简洁的解决方案。下面是一个不完整的例子: OrientationType t = Ma

我一直在使用此方法使用MagickWand API导出像素:

MagickExportImagePixels
但是,这似乎不符合图像中exif数据的方向。还有没有办法提取正确方向的像素,这样我就可以用不同的格式写出它们(不使用
MagickWriteImage
)?基本上,我想要转换的自动定向选项的行为


谢谢

看起来唯一的方法是通过获取图像方向并相应地旋转图像来进行伪手动操作。这并不难,但我希望API中内置一个更简洁的解决方案。下面是一个不完整的例子:

OrientationType t = MagickGetImageOrientation(magick_wand);
if (t == RightTopOrientation) {
    MagickRotateImage(mw, pw, 90);
}
...

看起来唯一的方法是通过获取图像方向并相应地旋转图像来进行伪手动操作。这并不难,但我希望API中内置一个更简洁的解决方案。下面是一个不完整的例子:

OrientationType t = MagickGetImageOrientation(magick_wand);
if (t == RightTopOrientation) {
    MagickRotateImage(mw, pw, 90);
}
...

看起来唯一的方法是通过获取图像方向并相应地旋转图像来进行伪手动操作。这并不难,但我希望API中内置一个更简洁的解决方案。下面是一个不完整的例子:

OrientationType t = MagickGetImageOrientation(magick_wand);
if (t == RightTopOrientation) {
    MagickRotateImage(mw, pw, 90);
}
...

看起来唯一的方法是通过获取图像方向并相应地旋转图像来进行伪手动操作。这并不难,但我希望API中内置一个更简洁的解决方案。下面是一个不完整的例子:

OrientationType t = MagickGetImageOrientation(magick_wand);
if (t == RightTopOrientation) {
    MagickRotateImage(mw, pw, 90);
}
...

我是ImageMagick的开发者之一,似乎我们忘了在Wand中添加这个方法。ImageMagick的下一版本(6.8.9-9)将包括以下可用于自动确定图像方向的方法:

MagickAutoOrientImage(magick_wand);

我是ImageMagick的开发者之一,似乎我们忘了在Wand中添加这个方法。ImageMagick的下一版本(6.8.9-9)将包括以下可用于自动确定图像方向的方法:

MagickAutoOrientImage(magick_wand);

我是ImageMagick的开发者之一,似乎我们忘了在Wand中添加这个方法。ImageMagick的下一版本(6.8.9-9)将包括以下可用于自动确定图像方向的方法:

MagickAutoOrientImage(magick_wand);

我是ImageMagick的开发者之一,似乎我们忘了在Wand中添加这个方法。ImageMagick的下一版本(6.8.9-9)将包括以下可用于自动确定图像方向的方法:

MagickAutoOrientImage(magick_wand);

当6.8.9+使用
MagickAutoOrientImage()
发布ImageMagick时,我使用以下代码自动定向图像:

void auto_orient_image(MagickWand* image) {
  PixelWand* pwand=0;
  switch(MagickGetImageOrientation(image))
  {
    case UndefinedOrientation:
    case TopLeftOrientation:
    default:
      break;
    case TopRightOrientation:
      MagickFlopImage(image);
      break;
    case BottomRightOrientation:
      pwand=NewPixelWand();
      MagickRotateImage(image, pwand, 180.0);
    case BottomLeftOrientation:
      MagickFlipImage(image);
      break;
    case LeftTopOrientation:
      MagickTransposeImage(image);
      break;
    case RightTopOrientation:
      pwand=NewPixelWand();
      MagickRotateImage(image, pwand, 90.0);
      break;
    case RightBottomOrientation:
      MagickTransverseImage(image);
      break;
    case LeftBottomOrientation:
      pwand=NewPixelWand();
      MagickRotateImage(image, pwand, 270.0);
      break;
  }
  if (pwand) DestroyPixelWand(pwand);
  MagickSetImageOrientation(image, TopLeftOrientation);
}

可能需要添加错误处理。

当6.8.9+版本的ImageMagick with
MagickAutoOrientImage()
不可用时,我使用以下代码自动定向图像:

void auto_orient_image(MagickWand* image) {
  PixelWand* pwand=0;
  switch(MagickGetImageOrientation(image))
  {
    case UndefinedOrientation:
    case TopLeftOrientation:
    default:
      break;
    case TopRightOrientation:
      MagickFlopImage(image);
      break;
    case BottomRightOrientation:
      pwand=NewPixelWand();
      MagickRotateImage(image, pwand, 180.0);
    case BottomLeftOrientation:
      MagickFlipImage(image);
      break;
    case LeftTopOrientation:
      MagickTransposeImage(image);
      break;
    case RightTopOrientation:
      pwand=NewPixelWand();
      MagickRotateImage(image, pwand, 90.0);
      break;
    case RightBottomOrientation:
      MagickTransverseImage(image);
      break;
    case LeftBottomOrientation:
      pwand=NewPixelWand();
      MagickRotateImage(image, pwand, 270.0);
      break;
  }
  if (pwand) DestroyPixelWand(pwand);
  MagickSetImageOrientation(image, TopLeftOrientation);
}

可能需要添加错误处理。

当6.8.9+版本的ImageMagick with
MagickAutoOrientImage()
不可用时,我使用以下代码自动定向图像:

void auto_orient_image(MagickWand* image) {
  PixelWand* pwand=0;
  switch(MagickGetImageOrientation(image))
  {
    case UndefinedOrientation:
    case TopLeftOrientation:
    default:
      break;
    case TopRightOrientation:
      MagickFlopImage(image);
      break;
    case BottomRightOrientation:
      pwand=NewPixelWand();
      MagickRotateImage(image, pwand, 180.0);
    case BottomLeftOrientation:
      MagickFlipImage(image);
      break;
    case LeftTopOrientation:
      MagickTransposeImage(image);
      break;
    case RightTopOrientation:
      pwand=NewPixelWand();
      MagickRotateImage(image, pwand, 90.0);
      break;
    case RightBottomOrientation:
      MagickTransverseImage(image);
      break;
    case LeftBottomOrientation:
      pwand=NewPixelWand();
      MagickRotateImage(image, pwand, 270.0);
      break;
  }
  if (pwand) DestroyPixelWand(pwand);
  MagickSetImageOrientation(image, TopLeftOrientation);
}

可能需要添加错误处理。

当6.8.9+版本的ImageMagick with
MagickAutoOrientImage()
不可用时,我使用以下代码自动定向图像:

void auto_orient_image(MagickWand* image) {
  PixelWand* pwand=0;
  switch(MagickGetImageOrientation(image))
  {
    case UndefinedOrientation:
    case TopLeftOrientation:
    default:
      break;
    case TopRightOrientation:
      MagickFlopImage(image);
      break;
    case BottomRightOrientation:
      pwand=NewPixelWand();
      MagickRotateImage(image, pwand, 180.0);
    case BottomLeftOrientation:
      MagickFlipImage(image);
      break;
    case LeftTopOrientation:
      MagickTransposeImage(image);
      break;
    case RightTopOrientation:
      pwand=NewPixelWand();
      MagickRotateImage(image, pwand, 90.0);
      break;
    case RightBottomOrientation:
      MagickTransverseImage(image);
      break;
    case LeftBottomOrientation:
      pwand=NewPixelWand();
      MagickRotateImage(image, pwand, 270.0);
      break;
  }
  if (pwand) DestroyPixelWand(pwand);
  MagickSetImageOrientation(image, TopLeftOrientation);
}
可能需要添加错误处理