2010-05-30 14 views
5

क्या कोई छवि स्केल करने के लिए वैसे भी है जो jsp पेज में प्रदर्शित होता है? छवियों को पुनर्प्राप्त और प्रदर्शित करते समय, मैं सभी फ़ोटो को एक ही आकार में दिखाना चाहता हूं। क्या कोई एपीआई ऐसा कर सकता है? मैंने Google से खोज की है, जो मैंने पाया वह छवियों को स्केलिंग के बारे में था लेकिन वेब एप्लिकेशन में काम नहीं कर सकता था।जेएसपी छवि को कैसे स्केल करें?

उत्तर

4

आप इस के लिए अंतर्निहित Java 2D API का उपयोग कर सकते हैं (मूल सूर्य ट्यूटोरियल here)।

मूल रूप से, आप एक Servlet जो doGet() विधि में मूल छवि का एक InputStream हो जाता है, जावा 2 डी एपीआई के माध्यम से पास कर देता है बनाने की जरूरत है और फिर HTTP प्रतिक्रिया के OutputStream करने के लिए इसे लिखते हैं। फिर आप web.xml में एक निश्चित url-pattern पर इस सर्वलेट को मानचित्र करें, उदा। /thumbs/* और एचटीएमएल <img> तत्व की src विशेषता में इस सर्वलेट को कॉल करें। इस प्रकार

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // First get image file name as request pathinfo (or parameter, whatever you want). 
    String imageFilename = request.getPathInfo().substring(1); 

    // And get the thumbnail dimensions as request parameters as well. 
    int thumbWidth = Integer.parseInt(request.getParameter("w")); 
    int thumbHeight = Integer.parseInt(request.getParameter("h")); 

    // Then get an InputStream of image from for example local disk file system. 
    InputStream imageInput = new FileInputStream(new File("/images", imageFilename)); 

    // Now scale the image using Java 2D API to the desired thumb size. 
    Image image = ImageIO.read(imageInput); 
    BufferedImage thumb = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB); 
    Graphics2D graphics2D = thumb.createGraphics(); 
    graphics2D.setBackground(Color.WHITE); 
    graphics2D.setPaint(Color.WHITE); 
    graphics2D.fillRect(0, 0, thumbWidth, thumbHeight); 
    graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
    graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null); 

    // Write the image as JPG to the response along with correct content type. 
    response.setContentType("image/jpeg"); 
    ImageIO.write(thumb, "JPG", response.getOutputStream()); 
} 

सर्वलेट web.xml में मैप के साथ:

यहाँ एक बुनियादी किकऑफ़ उदाहरण है (यदि आप अभी भी अप्रत्याशित स्थिति अपने आप को जिस तरह से आप चाहते संभालने की ज़रूरत है)

<servlet> 
    <servlet-name>thumbServlet</servlet-name> 
    <servlet-class>com.example.ThumbServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>thumbServlet</servlet-name> 
    <url-pattern>/thumbs/*</url-pattern>   
</servlet-mapping> 

यह हो सकता है निम्नानुसार उपयोग किया जाता है:

<img src="thumbs/filename.jpg?w=100&h=100" width="100" height="100"> 

नोट: नहीं, यह अकेले जेएसपी के साथ नहीं किया जा सकता है क्योंकि यह एक कार्य तकनीक इस कार्य के लिए अनुपयुक्त है।


नोट 2: यह एक बहुत महंगा (सीपीयू गहन) कार्य है, इसे ध्यान में रखें। आप पहले से ही अंगूठे को कैश या प्रीजेनरेट करने पर विचार करना चाह सकते हैं।

+0

मैंने वही किया, छवि सीमा केवल एक्सेल में प्रदर्शित होती है। कोई विचार? FYI इससे पहले कि मैंने डब्ल्यू और एच पैरामीटर निर्दिष्ट किया था, छवि प्रदर्शित हो रही थी लेकिन निर्दिष्ट आकार के साथ नहीं। – Palani

0

नोट: कोई, इस JSP अकेले के साथ नहीं किया जा सकता क्योंकि यह एक दृश्य प्रौद्योगिकी इस कार्य के लिए अनुपयुक्त है।

तकनीकी रूप से आप इसे कर सकते हैं, लेकिन वास्तव में यह सलाह नहीं दी जाती है।

और हां, मैं छवियों को लंबे समय तक कैश कर दूंगा, साथ ही मूल में परिवर्तनों की पहचान करने के लिए कुछ, साथ ही मूल परिवर्तन (या कैश की समयसीमा समाप्त हो जाती है, शायद छवि के एक हफ्ते बाद) अंतिम बार पहुंचाया गया था)।

संबंधित मुद्दे