자바를 사용하여 이미지 위에 워터 마크를 만들려면 어떻게해야합니까? 이미지 위에 제공된 위치에 사용자가 입력 한 텍스트를 추가해야합니다. 모든 샘플 코드/제안이 도움이 될 것입니다.자바로 이미지를 워터 마킹하려면 어떻게해야합니까?
답변
의 "그림 워터 마크"섹션에 모습을 가질 수 있습니다 참조 아니면 Thumbnailator에서 GIF4J 라이브러리를 http://www.gif4j.com/java-gif4j-pro-gif-image-watermark.htm#gifimagewatermarkapply
내 프로젝트에 사용했습니다. IM4Java library - java 용 imagemagick 래퍼. 워터 마킹 예를 들어 http://www.imagemagick.org/Usage/annotating/
이이 JSP로 사용할 수 있습니다에 워터 마크를 추가하는 코드는? –
@ user608576 예, 서버 –
+1에 설치된 imagemagick이어야하며 http://www.selonen.org/arto/netbsd/watermarks.html과 같은 기술을 사용하십시오. 하지만이 작업을 수행하지 않으면 잘 작동하지 않을 것입니다 ... –
을 사용할 수 있습니다, 하나에 텍스트 캡션을 추가 할 수 있습니다 Caption
이미지 필터를 사용하여 기존 이미지 : 위의 코드에서
// Image to add a text caption to.
BufferedImage originalImage = ...;
// Set up the caption properties
String caption = "Hello World";
Font font = new Font("Monospaced", Font.PLAIN, 14);
Color c = Color.black;
Position position = Positions.CENTER;
int insetPixels = 0;
// Apply caption to the image
Caption filter = new Caption(caption, font, c, position, insetPixels);
BufferedImage captionedImage = filter.apply(originalImage);
텍스트가 Hello World
O를 그려 질 n은 originalImage
을 중심으로 검은 색 전경색의 모노 스페이스 글꼴을 14pt로 사용합니다. 상기 코드 originalImage
상단에 watermarkImage
를 중첩한다
BufferedImage originalImage = ...;
BufferedImage watermarkImage = ...;
Watermark filter = new Watermark(Positions.CENTER, watermarkImage, 0.5f);
BufferedImage watermarkedImage = filter.apply(originalImage);
, 센터링 : 워터 마크 영상은 기존의 이미지에 적용하는 경우
대안 적으로, 하나는 Watermark
이미지 필터를 사용하여 불투명도는 50 %입니다.
Thumbnailator는 평범한 구 Java SE에서 실행됩니다. 하나는 타사 라이브러리를 설치할 필요가 없습니다. (그러나 Sun Java 런타임을 사용해야합니다.)
전체 공개 : 나는 Thumbnailator 개발자입니다.
시도했습니다. 하지만 유선 색상으로 이미지를 만듭니다. 이미지 라인을 만들 때해야 할 일이 있습니까? BufferedImage originalImage = ...; BufferedImage watermarkImage = ...; –
@ user608576 :이 문제와 관련하여 Thumbnailator 프로젝트 페이지에서 우연히 보고서를 제출 했습니까? (http://code.google.com/p/thumbnailator/issues/detail?id=10) 문제가 발생한 경우 더 많은 정보를 제공해주십시오. 감사! – coobird
예보고를했는데 이제는 더 자세한 내용을 추가했습니다. –
사용이 코드는, 그것은 이미지가 워터 마크로 사용되며, 여기 .. 를 작동 위치에 장소 (10, 10)
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class WatermarkImage {
public static void addWatermark(String localImagePath) {
try {
BufferedImage image = ImageIO.read(new File(localImagePath));
BufferedImage overlay = ImageIO.read(new File(".\\data\\watermark\\watermark.png"));
// create the new image, canvas size is the max. of both image sizes
int w = Math.max(image.getWidth(), overlay.getWidth());
int h = Math.max(image.getHeight(), overlay.getHeight());
BufferedImage combined = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
// paint both images, preserving the alpha channels
Graphics g = combined.getGraphics();
g.drawImage(image, 0, 0, null);
g.drawImage(overlay, 10, 0, null);
ImageIO.write(combined, "PNG", new File(localImagePath));
} catch (IOException e) {
e.printStackTrace();
}
}
}
먼저 C에있는 Imagemagick를 인스톨 한후에 : 창에있는 Imagemagick 폴더를 사용하여 \
http://www.imagemagick.org/download/binaries/ImageMagick-6.8.8-7-Q16-x86-dll.exe
설치가 C를 추가하는 동안 : ImageMagick를 \;
변수 PATH의 enviornment 코드
package UploadServlet;
import java.io.*;
import java.util.*;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.output.*;
/**
* Servlet implementation class UploadServlet
*/
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
private boolean isMultipart;
private String filePath;
private int maxFileSize = 50 * 1024;
private int maxMemSize = 4 * 1024;
private File file ;
public UploadServlet() {
super();
// TODO Auto-generated constructor stub
}
public void init(){
// Get the file location where it would be stored.
filePath = getServletContext().getInitParameter("file-upload");
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
throw new ServletException("GET method used with " +
getClass().getName()+": POST method required.");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// Check that we have a file upload request
isMultipart = ServletFileUpload.isMultipartContent(request);
response.setContentType("text/html");
java.io.PrintWriter out = response.getWriter();
if(!isMultipart){
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet upload</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>No file uploaded</p>");
out.println("</body>");
out.println("</html>");
return;
}
DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(maxMemSize);
// Location to save data that is larger than maxMemSize.
factory.setRepository(new File("c:\\temp"));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// maximum file size to be uploaded.
upload.setSizeMax(maxFileSize);
try{
// Parse the request to get file items.
List fileItems = upload.parseRequest(request);
// Process the uploaded file items
Iterator i = fileItems.iterator();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet upload</title>");
out.println("</head>");
out.println("<body>");
out.println("<h3>Watermark :</h3>");
out.println("Select a file to upload: <br />");
out.println("<form action=\"UploadServlet\" method=\"post\" enctype=\"multipart/form-data\">");
out.println("<input type=\"file\" name=\"file\" size=\"50\" /><br/>");
out.println("<input type=\"submit\" value=\"Upload File\" />");
out.println("</form><br/>");
while (i.hasNext())
{
FileItem fi = (FileItem)i.next();
if (!fi.isFormField())
{
// Get the uploaded file parameters
String fieldName = fi.getFieldName();
String fileName = fi.getName();
//System.out.println("Filename:" + fileName);
String contentType = fi.getContentType();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
// get application path
String webAppPath = getServletContext().getRealPath("/");
//System.out.println("Web Application Path :" + webAppPath);
// Write the file
file = new File(webAppPath + "ImageTest.jpeg") ;
fi.write(file) ;
out.println("<br/><h3>Uploaded File :</h3><img src=\"ImageTest.jpeg\" height='300px' width='300px' />");
String command = "";
command = "convert.exe -draw \"gravity south fill black text 0,0 'Watermark' \" \"" + webAppPath + "ImageTest.jpeg \" \""+ webAppPath +"imageTest_result.jpg \"";
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", command);
Process p = pb.start();
try {
Thread.sleep(1000);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
out.println("<br/><h3>Watermarked File :</h3><img src=\"imageTest_result.jpg\" height='300px' width='300px' />");
}
}
out.println("</body>");
out.println("</html>");
}catch(Exception ex) {
System.out.println(ex);
out.println("<br/><font color='red'><b>"+ex.getMessage()+"</b></font><br/>");
}
}
}
이하로 사용 최근 비슷한 필요성을 가지고 오히려 도움이 게시물을 발견 : 이 http://www.codeyouneed.com/java-watermark-image/
워터 마크 방법이를 위해 ImgScalr를 사용을 필요한 경우 워터 마크의 크기를 조정하고 이미지의 아래쪽/맨 위 + 워터 마크 이미지에 텍스트 배치를 지원합니다.
/**
* Generate a watermarked image.
*
* @param originalImage
* @param watermarkImage
* @param position
* @param watermarkSizeMaxPercentage
* @return image with watermark
* @throws IOException
*/
public static BufferedImage watermark(BufferedImage originalImage,
BufferedImage watermarkImage, PlacementPosition position,
double watermarkSizeMaxPercentage) throws IOException {
int imageWidth = originalImage.getWidth();
int imageHeight = originalImage.getHeight();
int watermarkWidth = getWatermarkWidth(originalImage, watermarkImage,
watermarkSizeMaxPercentage);
int watermarkHeight = getWatermarkHeight(originalImage, watermarkImage,
watermarkSizeMaxPercentage);
// We create a new image because we want to keep the originalImage
// object intact and not modify it.
BufferedImage bufferedImage = new BufferedImage(imageWidth,
imageHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = (Graphics2D) bufferedImage.getGraphics();
g2d.drawImage(originalImage, 0, 0, null);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
int x = 0;
int y = 0;
if (position != null) {
switch (position) {
case TOPLEFT:
x = 0;
y = 0;
break;
case TOPCENTER:
x = (imageWidth/2) - (watermarkWidth/2);
y = 0;
break;
case TOPRIGHT:
x = imageWidth - watermarkWidth;
y = 0;
break;
case MIDDLELEFT:
x = 0;
y = (imageHeight/2) - (watermarkHeight/2);
break;
case MIDDLECENTER:
x = (imageWidth/2) - (watermarkWidth/2);
y = (imageHeight/2) - (watermarkHeight/2);
break;
case MIDDLERIGHT:
x = imageWidth - watermarkWidth;
y = (imageHeight/2) - (watermarkHeight/2);
break;
case BOTTOMLEFT:
x = 0;
y = imageHeight - watermarkHeight;
break;
case BOTTOMCENTER:
x = (imageWidth/2) - (watermarkWidth/2);
y = imageHeight - watermarkHeight;
break;
case BOTTOMRIGHT:
x = imageWidth - watermarkWidth;
y = imageHeight - watermarkHeight;
break;
default:
break;
}
}
g2d.drawImage(Scalr.resize(watermarkImage, Method.ULTRA_QUALITY,
watermarkWidth, watermarkHeight), x, y, null);
return bufferedImage;
}
워터 마크의 크기를 계산하기위한 대응 방법이있다 :
올바른 위치를 선택하는 것이
public enum PlacementPosition {
TOPLEFT, TOPCENTER, TOPRIGHT, MIDDLELEFT, MIDDLECENTER, MIDDLERIGHT, BOTTOMLEFT, BOTTOMCENTER, BOTTOMRIGHT
}
전체 워터 마크 로직이 방법에 간단한 ENUM 사용
/**
*
* @param originalImage
* @param watermarkImage
* @param maxPercentage
* @return
*/
private static Pair<Double, Double> calculateWatermarkDimensions(
BufferedImage originalImage, BufferedImage watermarkImage,
double maxPercentage) {
double imageWidth = originalImage.getWidth();
double imageHeight = originalImage.getHeight();
double maxWatermarkWidth = imageWidth/100.0 * maxPercentage;
double maxWatermarkHeight = imageHeight/100.0 * maxPercentage;
double watermarkWidth = watermarkImage.getWidth();
double watermarkHeight = watermarkImage.getHeight();
if (watermarkWidth > maxWatermarkWidth) {
double aspectRatio = watermarkWidth/watermarkHeight;
watermarkWidth = maxWatermarkWidth;
watermarkHeight = watermarkWidth/aspectRatio;
}
if (watermarkHeight > maxWatermarkHeight) {
double aspectRatio = watermarkWidth/watermarkHeight;
watermarkHeight = maxWatermarkHeight;
watermarkWidth = watermarkHeight/aspectRatio;
}
return Pair.of(watermarkWidth, watermarkHeight);
}
/**
*
* @param originalImage
* @param watermarkImage
* @param maxPercentage
* @return
*/
public static int getWatermarkWidth(BufferedImage originalImage,
BufferedImage watermarkImage, double maxPercentage) {
return calculateWatermarkDimensions(originalImage, watermarkImage,
maxPercentage).getLeft().intValue();
}
/**
*
* @param originalImage
* @param watermarkImage
* @param maxPercentage
* @return
*/
public static int getWatermarkHeight(BufferedImage originalImage,
BufferedImage watermarkImage, double maxPercentage) {
return calculateWatermarkDimensions(originalImage, watermarkImage,
maxPercentage).getRight().intValue();
}
다시 모든 크레딧은 http://www.codeyouneed.com/java-watermark-image/ 좋은 샘플.
아래 모든 이미지
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
public class WatermarkImage {
public static void main(String[] args) {
File origFile = new File("C:/OrignalImage.jpg");
ImageIcon icon = new ImageIcon(origFile.getPath());
// create BufferedImage object of same width and height as of original image
BufferedImage bufferedImage = new BufferedImage(icon.getIconWidth(),
icon.getIconHeight(), BufferedImage.TYPE_INT_RGB);
// create graphics object and add original image to it
Graphics graphics = bufferedImage.getGraphics();
graphics.drawImage(icon.getImage(), 0, 0, null);
// set font for the watermark text
graphics.setFont(new Font("Arial", Font.BOLD, 30));
//unicode characters for (c) is \u00a9
String watermark = "\u00a9 JavaXp.com";
// add the watermark text
graphics.drawString(watermark, 0, icon.getIconHeight()/2);
graphics.dispose();
File newFile = new File("C:/WatermarkedImage.jpg");
try {
ImageIO.write(bufferedImage, "jpg", newFile);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(newFile.getPath() + " created successfully!");
}
}
- 1. 자바로 이미지를 두 개로 분리하는 방법
- 2. 자바로 변환
- 3. 텍스트 워터 마크 추가하기
- 4. ModelMetaData에서 워터 마크 속성을 채우려면 어떻게해야합니까?
- 5. Jquery로 이미지 워터 마킹
- 6. 워터 마크 이미지 (CListCtrl)
- 7. 자바로 간략화 또는 골격화
- 8. 자바로 이미지 파일 만들기
- 9. 오늘 자바로 만료일이
- 10. 워터 마크 + DirectShow 필터
- 11. Nginx 및 워터 마크
- 12. 자바로 인코딩
- 13. 자바로 묶기
- 14. 업로드시 이미지 워터 마킹
- 15. 자바로 인터넷을 통한 통신
- 16. 워터 마크
- 17. PyQt4 - 이미지 워터 마크
- 18. 이미지를 반복하지 않고 렌더링 된 PDF에 컨텍스트로 워터 마킹하는 방법
- 19. Windows에서 이미지를 오버레이하거나 워터 마크하는 방법 미디어 플레이어
- 20. C# jpeg 이미지를 어떻게 워터 마크 할 수 있습니까?
- 21. 자바로 볼륨 설정
- 22. phpThumb - 워터 마크 크기 변경
- 23. 이미지에 워터 마크 이미지 추가
- 24. URL의 이미지를 저장하려면 어떻게해야합니까?
- 25. Android에서 이미지를 둥글게하려면 어떻게해야합니까?
- 26. 이미지를 흐리게하려면 어떻게해야합니까?
- 27. Uri에서 이미지를 인쇄하려면 어떻게해야합니까?
- 28. 초기로드 이미지를 변경하려면 어떻게해야합니까?
- 29. CodeIgniter로 이미지를 채우려면 어떻게해야합니까?
- 30. Java로 이미지를 만들려면 어떻게해야합니까?
나는 이것을 사용했습니다. http://blog.codebeach.com/2008/02/watermarking-images-in-java-servlet.html –