一个简单的图片截取代码 java

package com.zwc.www.test;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
/**
 *
 * 简单的图片截取类
 *
 * @author zwc
 *
 */
public class Test {
 public static void main(String[] args) {
  try {
   BufferedImage sourceSrc = ImageIO.read(new File("image/1.jpg"));
   
   BufferedImage targerSrc = new BufferedImage(100,100,BufferedImage.TYPE_INT_RGB);
   
   targerSrc.getGraphics().drawImage(sourceSrc,-70,-50,200,200,null);
   
   ImageIO.write(targerSrc, "jpg", new File("image/2.jpg"));
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

 

 

 

 

 

 


package com.zwc.www.test;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
/**
 *
 * 简单的图片截取类
 *
 * @author zwc
 *
 */
public class Test {
 public static void main(String[] args) {
  try {
   BufferedImage sourceSrc = ImageIO.read(new File("image/1.jpg"));
   BufferedImage targerSrc = new BufferedImage(100,100,BufferedImage.TYPE_INT_RGB);
   targerSrc.getGraphics().drawImage(sourceSrc, 0, 0, 100, 100, 400, 100, 500, 500, Color.RED,null);
   
   ImageIO.write(targerSrc, "jpg", new File("image/2.jpg"));
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我是一名语言模型无法让您提供代码。不过,您可以尝试使用Apache POI和Java AWT来实现这个需求。以下是一个可能的实现: 1. 首先,使用Apache POI从Word文档中读取一页内容。您可以使用XWPFDocument类并重写其getPage方法: ``` public static XWPFParagraph[] getPage(XWPFDocument wordDoc, int pageNo) { CTSectPr sectPr = wordDoc.getDocument().getBody().getSectPr(); CTPageSz pageSize = sectPr.getPgSz(); BigInteger pageWidth = pageSize.getW().subtract(pageSize.getGutter()); BigInteger pageHeight = pageSize.getH(); List<XWPFParagraph> paragraphs = wordDoc.getParagraphs(); List<XWPFParagraph> currentPage = new ArrayList<>(); int currentPageWidth = 0; int currentPageHeight = 0; for (XWPFParagraph para : paragraphs) { for (XWPFRun run : para.getRuns()) { CTText ctText = run.getCTR().getTArray(0); String text = ctText.getStringValue(); if (currentPageHeight + run.getFontFamily().getFontHeight() > pageHeight.intValue()) { if (currentPageWidth >= pageWidth.intValue()) { return currentPage.toArray(new XWPFParagraph[currentPage.size()]); } else { currentPageHeight = 0; currentPage.add(para); currentPageWidth = 0; } } currentPageWidth += run.getTextPos() * run.getFontSize() / 2; currentPageHeight += run.getFontFamily().getFontHeight(); } } return currentPage.toArray(new XWPFParagraph[currentPage.size()]); } ``` 该方法使用文档中的第一页的页面尺寸(除去边距)计算每个段落和每个运行所需的宽度和高度,并将它们添加到列表中,直到页面大小被填满。然后,它返回这一页的所有段落。 请注意,此方法假定所有段落和运行都使用相同的字体和大小。如果您的Word文档包含多种字体或字号,则代码需要进行调整。 2. 接下来,使用Java AWT将这些段落渲染到图像中。您可以使用以下代码: ``` public static BufferedImage renderPage(XWPFParagraph[] paragraphs) { BufferedImage image = new BufferedImage(PAGE_WIDTH, PAGE_HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics2D graphics = image.createGraphics(); graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); int x = MARGIN_WIDTH; int y = MARGIN_HEIGHT; for (XWPFParagraph para : paragraphs) { for (XWPFRun run : para.getRuns()) { String text = run.getText(0); Font font = new Font(run.getFontFamily(), Font.PLAIN, run.getFontSize()); TextLayout layout = new TextLayout(text, font, graphics.getFontRenderContext()); layout.draw(graphics, x, y); x += layout.getAdvance(); } x = MARGIN_WIDTH; y += fontHeight; } return image; } ``` 该方法创建一个缓冲图像并使用Graphics2D对象渲染段落和运行中的文本。请注意,此代码假定您已经定义了页面宽度,高度和边距。您可以根据需要更改这些值。 3. 最后,将图像保存到文件中。您可以使用以下代码: ``` public static void saveImage(BufferedImage image, String fileName) throws IOException { ImageIO.write(image, "png", new File(fileName)); } ``` 这将使用Java自带的ImageIO类将图像保存为PNG格式。 请注意,这只是一个简单的实现。您可能需要进行更多的错误检查和处理,以及在代码中添加更多的配置选项。此外,某些语言和文本方向可能需要额外的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值