gpt4 book ai didi

java - 为什么 Google Appengine 的图像 API 提供的图像方向不正确?

转载 作者:行者123 更新时间:2023-12-02 03:10:42 25 4
gpt4 key购买 nike

如果您使用 AppEngine 创建镜像 Images API输出图像没有 Exif。如果源图像在 Exif 中设置了方向标志,则该标志不会保留到输出图像中,因此对用户来说将显示为旋转。

有没有办法告诉 ImagesServiceFactory 将 Exif 传递到输出图像?

最佳答案

到目前为止,我发现的最好方法是使用 a java Exif parser 简单地读取方向标志。 ,然后对生成的图像应用旋转变换,以便像素实际旋转。这是一个简化的示例:

byte[] sourceImage = yourCode();

int orientation = 1;
try {
Metadata metadata = ImageMetadataReader.readMetadata(new ByteArrayInputStream(sourceImage));
orientation = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class).getInt(ExifIFD0Directory.TAG_ORIENTATION);
} catch (Throwable t) {
log.log(Level.INFO, "Failed to extract orientation", t);
}

Image destinationImage = ImagesServiceFactory.makeImage(sourceImage);
Transform rotate;

switch (orientation) {
case (EXIF_ORIENTATION_90): {
rotate = ImagesServiceFactory.makeRotate(90);
break;
}
case (EXIF_ORIENTATION_180): {
rotate = ImagesServiceFactory.makeRotate(180);
break;
}
case (EXIF_ORIENTATION_270): {
rotate = ImagesServiceFactory.makeRotate(270);
break;
}
default:
rotate = ImagesServiceFactory.makeRotate(0); // anything else, no rotate
}
destinationImage = ImagesServiceFactory.getImagesService().applyTransform(rotate, destinationImage);

final byte[] destinationImageData = destinationImage.getImageData();

这应该足以让你继续前进。 Possible Exif orientation values (如果存在)是:

1 = Horizontal (normal) 
2 = Mirror horizontal
3 = Rotate 180
4 = Mirror vertical
5 = Mirror horizontal and rotate 270 CW
6 = Rotate 90 CW
7 = Mirror horizontal and rotate 90 CW
8 = Rotate 270 CW

我不想这样做,因为它需要不必要的转换和额外的 Exif 解析步骤。欢迎更好的解决方案:)

关于java - 为什么 Google Appengine 的图像 API 提供的图像方向不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56996976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com