Как я могу увеличить размер ширины в файле PNG? - PullRequest
2 голосов
/ 24 сентября 2019

В настоящее время я работаю с изображениями PNG, и я немного заблокирован, потому что задача, которая не знает, как исправить ...

Это сценарий.У меня есть PNG-файл 655x265 пикселей со штрих-кодом внутри.Что мне нужно сделать, это «расширить» ширину изображения, чтобы включить пустую зону слева от изображения, вот так:

Resize and extends canvas in png file Java

Проблема в том, что при выполнении кода ничего не происходит с размерами изображения:

public static void main(String[] args)
{
    try
    {
        String path = "C:\\Users\\xxx\\Desktop\\a.png";
        BufferedImage image = ImageIO.read(new File(path));
        resizeImage(path, image.getWidth() + 100, image.getHeight());
        Graphics graphics = image.getGraphics();
        graphics.setColor(Color.BLACK);
        graphics.setFont(new Font("Verdana", Font.PLAIN, 40));
        graphics.drawString("TTT", 5, 250);
        graphics.dispose();
        ImageIO.write(image, "png", new File(path));
        System.out.println("Image created");
    } catch (Exception e)
    {
        System.out.println(e.getMessage());
        e.printStackTrace();
    }
    System.out.println("Fin");
}

public static void resizeImage(String path, int newHeight, int newWidth) throws IOException
{
    File inputFile = new File(path);
    BufferedImage inputImage = ImageIO.read(inputFile);

    BufferedImage outputImage = new BufferedImage(newWidth, newHeight, inputImage.getType());

    Graphics2D graphics = outputImage.createGraphics();
    graphics.drawImage(inputImage, 0, 0, newWidth, newHeight, null);
    graphics.dispose();

    ImageIO.write(outputImage, "png", new File(path));
    inputImage.flush();
    outputImage.flush();
}

Знаете ли вы, что я делаю неправильно?Один из моих первых опытов работы с файлами изображений, и, вероятно, я неправильно понял что-то важное ...

Редактировать: Решение предоставлено в комментариях. Ссылка

1 Ответ

2 голосов
/ 24 сентября 2019

Что вы можете сделать, это позволить методу получить BufferedImage, изменить его размер и вернуть его:

public static BufferedImage resizeImage(BufferedImage inputImage, int newHeight, int newWidth){
    BufferedImage outputImage = new BufferedImage(newWidth, newHeight, inputImage.getType());
    Graphics2D graphics = outputImage.createGraphics();
    graphics.drawImage(inputImage, 0, 0, newWidth, newHeight, null);
    graphics.dispose(); 
    outputImage.flush();
    return outputImage;
}

Затем продолжить работу с измененным размером изображения в вашем окружающем методе:

    String path = "C:\\Users\\xxx\\Desktop\\a.png";
    BufferedImage image = ImageIO.read(new File(path));
    image = resizeImage(image, image.getWidth() + 100, image.getHeight());  // here you replace the image with the new, resized image from your method
    Graphics graphics = image.getGraphics();
    graphics.setColor(Color.BLACK);
    ....
...