Java 程序旋转图像


图像文件可以顺时针或逆时针旋转。要旋转图像,需要下载一个随机图像文件并将其保存在系统上的任何文件夹中。此外,需要一个 .pdf 文件来创建并在该特定 .pdf 文件中打开下载的图像后旋转一定的角度。对于 90 度旋转,新图像的锚点有助于我们使用 Java 中的平移变换执行旋转操作。锚点是任何特定图像的中心。

使用 Java 旋转图像的算法

“AffineTransformOp”类是使用 Java 旋转图像文件的最简单方法。用户可以将图像数据加载为 Buffered Image,并使用锚点应用旋转操作,以生成下一步的新 BufferedImage。始终建议对这些操作使用 JPEG 文件,并使用 JDeli(具有广泛范围的文件类型)。

要使用 Java 程序旋转图像,编码人员可以使用一些内置方法,例如 BufferedImage 类和 Color c。

使用此过程,我们需要将图像作为 BufferedImage 加载到 Java 中,然后使用相同的功能旋转图像并将数据保存到新文件。

现在,让我们讨论一下算法,以便更广泛地理解上述操作。

  • 步骤 1 - 读取和写入图像并导入到表示目录路径的文件类中。

  • 步骤 2 - 使用 IOException:处理错误。

  • 步骤 3 - 使用名为 BufferedImage 的对象来保存特定图像,使用静态方法将数据保存在 RAM 中。

  • 步骤 4 - 使用 ImageIO 执行读写操作。

  • 步骤 5 - 使用 Graphics2D 类渲染 2D 形状。

语法

Code declaration: public static Image rotate(Image image, double angle)

根据此语法,有一些步骤需要理解。

  • 参数 -

    • 图像 - 执行旋转操作

    • 角度 - 弧度旋转

  • 返回值 - 旋转后的图像文件

以下过程可用于使用 Java 程序旋转图像文件 -

  • 步骤 1 - 将图像文件作为 BufferedImage 加载到 Java 环境中,以在 Java 中加载图像文件 -

BufferedImage image = ImageIO.read(new File("C:\path\to\image name.jpg"));
  • 步骤 2 - 旋转图像 90 度

  • 要将图像文件旋转 90 度,请遵循以下代码 -

final double rads = Math.toRadians(90);
final Rotate rotate = new Rotate(90);
BufferedImage rotatedImage = rotate.apply(image);
  • 步骤 3 - 保存图像文件

Use Java ImageIO 
ImageIO.write(rotatedImage,"JPG",newFile("C:\path\to\rotatedImagename.jpg"));

示例

import java.awt.*;
import java.awt.image.BufferedImage;
public class Main {
   public static Image rotate(Image image, double angle) {
      BufferedImage bufImg = toBufferedImage(image);
      double sin = Math.abs(Math.sin(angle)), cos = Math.abs(Math.cos(angle));
      int w = bufImg.getWidth(), h = bufImg.getHeight();
      int neww = (int) Math.floor(w * cos + h * sin), newh = (int) Math.floor(h * cos + w * sin);
      BufferedImage result = new BufferedImage(neww, newh, Transparency.TRANSLUCENT);
      Graphics2D g = result.createGraphics();
      g.translate((neww - w) / 2, (newh - h) / 2);
      g.rotate(angle, w / 2, h / 2);
      g.drawRenderedImage(bufImg, null);
      g.dispose();
      return result;
   } 
   public static BufferedImage toBufferedImage(Image image) {
      if (image instanceof BufferedImage) {
         return (BufferedImage) image;
      }
      BufferedImage buff = new BufferedImage(image.getWidth(null), image.getHeight(null),
      BufferedImage.TYPE_INT_ARGB);
      Graphics2D g = buff.createGraphics();
      g.drawImage(image, 0, 0, null);
      g.dispose();
      return buff;
   }
}

使用 BufferedImage 函数旋转图像

通过使用 try-catch 块方法,我们可以处理异常,因为它们可能会干扰代码的流程。

  • 文档类 - 文档类主要用于呈现 pdf 文档。在此特定 Java 程序中,我们需要使用 ie.documentobj 函数创建一个文档类。此函数用于打开和关闭 pdf 文件。

  • PDF Writer 类 - 该函数支持 PDF、XML、RTF 文件生成,以对图像文件旋转进行编码。我们在此处使用的目录函数是 fileOutputStream(),用于处理 Java 代码的文件。

  • 输出函数 - output.pdf 是一个函数类,表示使用 Java 代码执行操作后的输出。此函数有助于根据提供的输入获取输出。

  • 函数 -

    • image class.imgage.scaleToFit() - 该函数帮助我们在预设的输入文件中设置大小。

    • imageobj.setRotationDegrees() - 编码人员可以使用此函数以某个角度旋转图像。它可以用作我们使用的方法中的参数。

    • documentobj.open() - 该函数帮助用户在操作时打开文件。

    • documentobj.close() - 用于关闭 .pdf 文件。

示例

package JavaApplication29;
import java.io.FileOutputStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;

public class JavaApplication29 {
   public static void main(String[] args) {
      try {
         Document documentobj = new Document(PageSize.A4, 20, 20, 20, 20);
         PdfWriter.getInstance(documentobj, new FileOutputStream("output.pdf"));
         documentobj.open();
         Image imageobj = Image.getInstance("C:\Users\lenovo\Desktop\RDD\Logo Org.jpg");
         imageobj.scaleToFit(200f, 200f);
         imageobj.setRotationDegrees(90);
         documentobj.add(imageobj);
         documentobj.close();
         System.out.println("Task completed");
      } catch (Exception e) {
         System.out.println("Exception occurred");
      }
   }
}

输出

通过使用程序中编码的可能方法,控制台显示尺寸和执行弹出窗口。旋转后会保存一个新图像。

结论

在本文中,上述讨论的过程有助于旋转图像文件。对于 90 度旋转,程序需要设置一个新图像,所有参数都需要更改。由于锚点保持在图像的中心,因此顺时针和逆时针旋转的操作相同。

更新于: 2023 年 3 月 31 日

2K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告

© . All rights reserved.