जावा का उपयोग कर छवि पर वॉटरमार्क कैसे बना सकता हूं? मुझे छवि पर प्रदान की गई स्थिति में जोड़े जाने के लिए उपयोगकर्ता द्वारा दर्ज टेक्स्ट की आवश्यकता है। कोई नमूना कोड/सुझाव मदद मिलेगी।मैं जावा में एक छवि वॉटरमार्क कैसे कर सकता हूं?
उत्तर
की "ड्राइंग वॉटरमार्क" अनुभाग पर देख सकते हैं या आप Thumbnailator में GIF4J पुस्तकालय http://www.gif4j.com/java-gif4j-pro-gif-image-watermark.htm#gifimagewatermarkapply
मैंने अपनी परियोजनाओं के लिए IM4Java library - जावा के लिए छविमैजिक रैपर का उपयोग किया। देख वॉटरमार्किंग उदाहरण के लिए http://www.imagemagick.org/Usage/annotating/
इस JSP के साथ इस्तेमाल किया जा सकता पर वाटर मार्क जोड़ने के लिए कोड है? –
@ user608576 हां, लेकिन यह सर्वर –
+1 पर स्थापित छविमैजिक स्थापित करने की आवश्यकता है और फिर 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
ओ तैयार किया जाएगा एन originalImage
पर एक मनोरंजक फ़ॉन्ट के साथ, 14 पीटी पर एक काला अग्रभूमि रंग के साथ केंद्रित है।
BufferedImage originalImage = ...;
BufferedImage watermarkImage = ...;
Watermark filter = new Watermark(Positions.CENTER, watermarkImage, 0.5f);
BufferedImage watermarkedImage = filter.apply(originalImage);
ऊपर कोड originalImage
के शीर्ष पर watermarkImage
मिलाती हैं जाएगा, एक साथ केंद्रित:
वैकल्पिक रूप से, अगर एक वॉटरमार्क छवि एक मौजूदा छवि के लिए लागू किया जा रहा है, एक Watermark
छवि फिल्टर का उपयोग कर सकते 50% की अस्पष्टता।
थंबनेलेटर सादे पुराने जावा एसई पर चलाएगा - किसी को किसी तीसरे पक्ष के पुस्तकालयों को स्थापित करने की आवश्यकता नहीं है। (हालांकि, सन जावा रनटाइम का उपयोग करना आवश्यक है।)
पूर्ण प्रकटीकरण: मैं थंबनेलेटर के लिए डेवलपर हूं।
मैंने यह कोशिश की लेकिन यह कुछ वायर्ड रंगों के साथ छवि बनाता है। क्या छवि चीजों को बनाने के साथ मुझे कुछ करने की ज़रूरत है? BufferedImage मूल छवि = ...; बुफर्ड इमेज वॉटरमार्क इमेज = ...; –
@ user608576: क्या आपने इस मुद्दे के बारे में थंबनेलर प्रोजेक्ट पेज पर एक रिपोर्ट दर्ज की थी? (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();
}
}
}
पहले सी में ImageMagick इंस्टॉल: \ windows में ImageMagick फ़ोल्डर का उपयोग कर
http://www.imagemagick.org/download/binaries/ImageMagick-6.8.8-7-Q16-x86-dll.exe
स्थापना सी जोड़ने जबकि: \ ImageMagick; पथ वातावरण चर
और में कोड
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 का उपयोग करता है आवश्यकता होने पर वॉटरमार्क का आकार बदलना और छवि के नीचे/ऊपर + वॉटरमार्क छवि में पाठ रखने का समर्थन करता है।
सही स्थान चुनने के लिए यह एक सरल Enum
public enum PlacementPosition {
TOPLEFT, TOPCENTER, TOPRIGHT, MIDDLELEFT, MIDDLECENTER, MIDDLERIGHT, BOTTOMLEFT, BOTTOMCENTER, BOTTOMRIGHT
}
और सारी वॉटरमार्किंग तर्क इस विधि में है का उपयोग करता है:
/**
* 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;
}
और वॉटरमार्क आकार की गणना के लिए इसी तरीकों जाता है:
/**
*
* @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. सी # में एक अदृश्य छवि वॉटरमार्क जोड़ना?
- 5. मैं जावा में यूआरएल से छवि कैसे पढ़ सकता हूं?
- 6. मैं जीडी और PHP के साथ वॉटरमार्क छवि कैसे दोहरा सकता हूं?
- 7. मैं ReportLab छवि गुणवत्ता में सुधार कैसे कर सकता हूं?
- 8. मैं जावा में कैसे जुड़ सकता हूं?
- 9. मैं स्क्रीन सेंटर में छवि कैसे प्रदर्शित कर सकता हूं?
- 10. एंड्रॉइड में किसी छवि पर वॉटरमार्क प्रभाव कैसे जोड़ सकता हूं?
- 11. ऐड वॉटरमार्क छोटे छवि opencv4android
- 12. मैं जावा के माध्यम से एक jpg छवि कैसे संपादित कर सकता हूं?
- 13. मैं मौजूदा पीडीएफ फ़ाइल में एक पीडीएफ फ़ील्ड में एक छवि कैसे सेट कर सकता हूं?
- 14. मैं जावा में जीयूआई कैसे रीफ्रेश कर सकता हूं?
- 15. मैं जावा में सीपीयूड कैसे प्राप्त कर सकता हूं?
- 16. मैं जावा में जावास्क्रिप्ट का उपयोग कैसे कर सकता हूं?
- 17. मैं जावा में विंडोज ड्राइव कैसे माउंट कर सकता हूं?
- 18. मैं जावा में एलजेडब्लू डिकोडिंग कैसे कर सकता हूं?
- 19. मैं जावा कोड में एक मौजूदा लेआउट के भीतर एक छवि दृश्य कैसे बना सकता हूं?
- 20. मैं संसाधन से बिटमैप छवि कैसे प्राप्त कर सकता हूं?
- 21. मैं tkinter/ttk का उपयोग कर पायथन 3 में एक छवि कैसे प्रदर्शित कर सकता हूं?
- 22. मैं जावा से क्लोजर में कैसे संक्रमण कर सकता हूं?
- 23. मैं जावा में लुआ कैसे एम्बेड कर सकता हूं?
- 24. मैं एक ही पंक्ति में कैसे प्रिंट कर सकता हूं?
- 25. मैं एक नियंत्रण की उपस्थिति को एक छवि में कैसे परिवर्तित कर सकता हूं?
- 26. मैं छवि वर्ग कैसे बढ़ा सकता हूं?
- 27. जावा में, मैं एक स्क्लाइट टेबल कैसे हटा सकता हूं?
- 28. मैं एक आरजीबी छवि को ग्रेस्केल में कैसे परिवर्तित कर सकता हूं लेकिन एक रंग रख सकता हूं?
- 29. मैं पीआईएल छवि से ओपनसीवी छवि कैसे बना सकता हूं?
- 30. मैं जावा में एक GEOTIFF कैसे लिख सकता हूं?
मैंने इसका इस्तेमाल किया http://blog.codebeach.com/2008/02/watermarking-images-in-java-servlet.html –