Я хочу вырезать определенную форму изображения в java, например изображение, которое содержит человека с белым фоном, здесь я хочу обрезать человека без фона. Не хотите делать это прозрачным изображением, хотите вырезать некоторые координаты. Я думаю, используя cropImageFilter, мы можем разрезать область прямоугольника. Может ли кто-нибудь позвонить мне, как это сделать?Обрезка изображения в java
ответ
Во-первых, вам нужно создать java.awt.image.BufferedImage из java.awt.Image. Вот код для этого, от DZone Snippets.
/**
* @author Anthony Eden
*/
public class BufferedImageBuilder {
private static final int DEFAULT_IMAGE_TYPE = BufferedImage.TYPE_INT_RGB;
public BufferedImage bufferImage(Image image) {
return bufferImage(image, DEFAULT_IMAGE_TYPE);
}
public BufferedImage bufferImage(Image image, int type) {
BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);
Graphics2D g = bufferedImage.createGraphics();
g.drawImage(image, null, null);
waitForImage(bufferedImage);
return bufferedImage;
}
private void waitForImage(BufferedImage bufferedImage) {
final ImageLoadStatus imageLoadStatus = new ImageLoadStatus();
bufferedImage.getHeight(new ImageObserver() {
public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
if (infoflags == ALLBITS) {
imageLoadStatus.heightDone = true;
return true;
}
return false;
}
});
bufferedImage.getWidth(new ImageObserver() {
public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
if (infoflags == ALLBITS) {
imageLoadStatus.widthDone = true;
return true;
}
return false;
}
});
while (!imageLoadStatus.widthDone && !imageLoadStatus.heightDone) {
try {
Thread.sleep(300);
} catch (InterruptedException e) {
}
}
}
class ImageLoadStatus {
public boolean widthDone = false;
public boolean heightDone = false;
}
}
Теперь, когда у вас есть BufferedImage, вы можете использовать этот многоугольник координат вы должны включить пиксели, которые не человек, прозрачный. Просто используйте методы, предоставленные в BufferedImage.
Вы не можете буквально разрезать многоугольник из BufferedImage. BufferedImage должен быть прямоугольником. Лучшее, что вы можете сделать, это сделать части изображения, которые вы не хотите прозрачным. Или вы можете поместить нужные пиксели в другой прямоугольный BufferedImage.
Я не уверен, но класс Graphics2D имеет amethod clip(), который принимает многоугольник, и я думаю, делает то, что вам нужно.
Так создать BufferedImage с вашего изображения, и получить объект Graphics2D с createGraphics()
- 1. Обрезка изображения с помощью Java
- 2. обрезка изображения
- 3. Обрезка изображений в Java
- 4. Обрезка изображения в PHP
- 5. обрезка изображения в android
- 6. Обрезка изображения в Scilab
- 7. Обрезка изображения в Android
- 8. Обрезка изображения в MATLAB
- 9. Обрезка изображения в PHP
- 10. Обрезка изображения в matlab
- 11. Обрезка изображения из существующего изображения
- 12. OpenCV python обрезка изображения
- 13. JQuery изображения карусели обрезка
- 14. Ответственный обрезка изображения
- 15. Обрезка изображения на рельсах
- 16. Обрезка PNG изображения
- 17. Обрезка изображения с ImageScience
- 18. php масштабированное обрезка изображения
- 19. Обрезка изображения с прямоугольником
- 20. Обрезка большого фонового изображения
- 21. Facebook обрезка изображения
- 22. Правильная обрезка изображения Проблема
- 23. MATLAB help обрезка изображения
- 24. Обрезка изображения из AVCaptureStillImageOutput
- 25. выберите часть изображения (обрезка)
- 26. Обрезка изображения во фрагменте
- 27. Php обрезка изображения
- 28. Обрезка изображения без торчания
- 29. Динамическое обрезка изображения в Tensorflow
- 30. Эффективная обрезка изображения в JavaFX
Итак, вы хотите, чтобы вырезать человек точно, в соответствии с формой человека? Вы понимаете, что это не тривиальная задача? Компьютер очень легко распознает вещи в изображении. Для этого, конечно, нет простого API в стандартной библиотеке Java. – Jesper
Привет, Jesper, спасибо за ваш ответ, я координирую со мной i.e У меня есть точки полигона (координаты), чтобы обрезать форму мужчины. С этим мы можем сделать что-нибудь? – SWDeveloper