2009-12-11 13 views
5

जिस तरह से मैं अधिकांश लोगों का उपयोग करता हूं Processing क्लाइंट पक्ष पर सीधे एक स्क्रीन या वेबपृष्ठ पर छवि खींचने के लिए है।दृश्यों के पीछे छवियों को बनाने के लिए सर्वर पर प्रसंस्करण का उपयोग

कोई दृश्य कैनवास के बिना छवि बनाने के लिए प्रसंस्करण का उपयोग कैसे करेगा, फिर इस छवि को फ़ाइल में सहेजें?

  1. किसी एक वेबपेज, जिसकी वजह से प्रसंस्करण कार्यक्रम
  2. प्रसंस्करण कार्यक्रम चलाने पर्दे के पीछे रहकर एक बनाने के लिए होता है शुरू करने के लिए दौरा:

    यहाँ विशेष कदम मुझे इसमें रुचि में हैं छवि, फिर इसे एक ज्ञात फ़ाइल नाम

  3. वेबपृष्ठ ज्ञात फ़ाइल नाम लोड करेगा (जो प्रसंस्करण प्रोग्राम चलाने के बाद ही मौजूद है - तो, ​​वेबपृष्ठ को समाप्त होने पर छवि को लोड करने के बारे में कैसे पता चल सकता है?)

मुझे लगता है कि प्रसंस्करण प्रोग्राम एक सर्वर पर चल रहा है (जो आमतौर पर प्रसंस्करण कैसे काम करता है इसके विपरीत है), और फ़ाइल सर्वर पर संग्रहीत की जाएगी। मैं प्रोसेसिंग प्रोग्राम में कुछ कोडों को भी थ्रॉटल करने के लिए प्रसंस्करण प्रोग्राम में कुछ कोड मान रहा हूं - उदाहरण के लिए, यदि कोई मौजूदा छवि 5 मिनट के भीतर बनाई गई तो यह एक नई छवि नहीं बनाएगी।

+0

क्यों आप कार्य के लिए प्रसंस्करण चयन कर रहे हैं, बजाय दे कार्य में मदद भाषा का चुनाव प्रत्यक्ष? –

+1

मान्य सवाल। मुझे प्रसंस्करण पसंद है क्योंकि यह गैर-तुच्छ ग्राफिक्स को बनाने में आसान बनाता है। लेकिन मुझे लगता है कि मैं इसे नहीं देख रहा हूं, अगर यह सिस्टम के भीतर समझ में नहीं आता है (क्या मैं एक गोल छेद में एक वर्ग चरम जाम करने की कोशिश कर रहा हूं?) –

+0

प्रस्तुत करने के लिए छवि और समय की जटिलता के आधार पर, आप कैनवास में सामने के अंत में छवि प्रस्तुत करने के लिए प्रसंस्करण.जेएस का उपयोग करने पर विचार कर सकते हैं। – JAMESSTONEco

उत्तर

10

मैंने फ्लाई पर छवियों को प्रस्तुत करने के लिए एक सर्वलेट में प्रोसेसिंग का उपयोग करके ऐसा किया है। मुझे मिली एक समस्या यह है कि प्रसंस्करण थ्रेड-सुरक्षित नहीं है, इसलिए मुझे कई प्रोसेसिंग उदाहरण बनाना था और उन्हें कतार में साझा करना था।

import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.util.concurrent.LinkedBlockingQueue; 

import javax.imageio.ImageIO; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import processing.core.PApplet; 

public class Tile extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
    private static LinkedBlockingQueue<PApplet> pQueue = new LinkedBlockingQueue<PApplet>(); 

    private PApplet createPApplet() { 
     PApplet p = new PApplet(); 
     p.init(); 
     p.size(256, 256); 
     p.noLoop(); 
     p.textFont(p.createFont("Monospace", 8, true)); 
     p.stroke(0x22FFFFFF); 
     p.colorMode(PApplet.HSB, 256, 1, 1); 
     return p; 
    } 

    protected void doGet(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
     PApplet p; 

     if (pQueue.size() == 0) { 
      p = createPApplet(); 
     } else { 
      try { 
       p = pQueue.take(); 
      } catch (InterruptedException e) { 
       p = createPApplet(); 
      } 
     } 

     int zoom = Integer.parseInt(request.getParameter("z")); 
     int tileX = Integer.parseInt(request.getParameter("x")); 
     int tileY = Integer.parseInt(request.getParameter("y")); 
     int tiles = 1 << zoom; 

     p.loadPixels(); 

     final int N = 256; 
     //final double inverse_N = 2.0/256; 
     final double inverse_N = 2.0/tiles/256; 
     int y = -1; 

     while ((++y) < N) { 
      double Civ = (double) (y + tileY * 256) * inverse_N - 1.0; 
      for (int x = 0; x < N; x++) { 
       double Crv = (double) (x + tileX * 256) * inverse_N - 1.5; 

       double Zrv = Crv; 
       double Ziv = Civ; 

       double Trv = Crv * Crv; 
       double Tiv = Civ * Civ; 

       int i = 256; 
       do { 
        Ziv = (Zrv * Ziv) + (Zrv * Ziv) + Civ; 
        Zrv = Trv - Tiv + Crv; 

        Trv = Zrv * Zrv; 
        Tiv = Ziv * Ziv; 
       } while (((Trv + Tiv) <= 4.0) && (--i > 0)); 

       if (i == 0) { 
        p.pixels[x + y * N] = 0x00000000; 
       } else { 
        p.pixels[x + y * N] = p.color(256 - i,1,1); 
       } 
      } // end foreach column 
     } 
     p.updatePixels(); 

     // render info 
     p.fill(0x22000000); 
     p.text("X: " + tileX + "\nY: " + tileY + "\nZ: " + zoom, 1, 13); 
     p.fill(0x22FFFFFF); 
     p.text("X: " + tileX + "\nY: " + tileY + "\nZ: " + zoom, 0, 12); 

     p.line(0, 0, 0, 2); 
     p.line(0, 0, 2, 0); 
     p.line(255, 255, 255, 253); 
     p.line(255, 255, 253, 255); 

     // done 
     p.loadPixels(); 
     BufferedImage img = new BufferedImage(256, 256, 
       BufferedImage.TYPE_INT_ARGB); 
     img.setRGB(0, 0, 256, 256, p.pixels, 0, 256); 
     p.draw(); 

     response.setHeader("Content-Type", "image/png"); 
     ImageIO.write(img, "PNG", response.getOutputStream()); 

     try { 
      pQueue.put(p); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

} 
+0

आपका डेमो लिंक 404 है। – enobrev

+0

धन्यवाद, यह अभी ऑफ़लाइन है, मैंने लिंक हटा दिया है। –

2

प्रसंस्करण मूल रूप से जावा के लिए लिखा गया था अगर मुझे सही याद है। इसे तब जावास्क्रिप्ट में भेज दिया गया था। आप छवि बनाने के लिए जावा का उपयोग कर सकते हैं।

0

आप सर्वर पर एक जावास्क्रिप्ट इंजन चला सकते हैं और प्रसंस्करण का उपयोग कर सकते हैं जैसे कि आप इसे ब्राउज़र में उपयोग करेंगे।

का तरीका यहां बताया v8 दुभाषिया स्थापित कर सकते हैं:

Running v8 Javascript Engine standalone.

मैं काफी यकीन है कि यह आप फ़ाइलों तक पहुँचने के लिए अनुमति देता है, तो नहीं कर रहा हूँ, लेकिन मुझे यकीन है कि वहाँ यह करने के लिए तरीके हैं रहा हूँ।

+0

जबकि यह संभव है, क्यों न केवल प्रसंस्करण के मूल (जावा) संस्करण को चलाएं? या जावास्क्रिप्ट संस्करण में अतिरिक्त विशेषताएं हैं? –

1

आप प्रसंस्करण here के जावा संस्करण को डाउनलोड कर सकते हैं और इसका उपयोग कर सकते हैं। प्रसंस्करण जावास्क्रिप्ट तक ही सीमित नहीं है। जैसा कि बेन का उल्लेख है, यह एक जावा कार्यक्रम के रूप में शुरू हुआ। होमपेज जावास्क्रिप्ट, क्लोजर, रूबी और स्कैला में कार्यान्वयन भी सूचीबद्ध करता है।

इसे अपने शेष वेब पेज में एकीकृत करने के लिए अपने वेब ढांचे पर निर्भर करता है।

0

प्रसंस्करण जावा है:

यहाँ एक सर्वलेट जो मैंडलब्रॉट भग्न प्रस्तुत हुई है, आच्छादन के रूप में गूगल मैप्स द्वारा इस्तेमाल किया जा रहा है। जावास्क्रिप्ट मोड, 2.0 (बीटा एक्स) में नया processingjs एक पुस्तकालय है जो जावास्क्रिप्ट में प्रोसेसिंग कोड "प्री प्रोसेस" प्रोसेसिंग कोड है। असल में कम विशेषताएं हैं और कोई प्रसंस्करण लाइब्रेरी संगत नहीं है। यह प्रसंस्करण डेवलपर्स से 2.0:

2.0 अल्फा 7 में शुरू होने पर जावा एप्लेट समर्थन हटाया जा रहा है।यह हमारी प्राथमिकताओं, वेब ब्राउज़र समर्थन की कमी, ... जबकि ब्राउज़र निर्माताओं और ओएस विक्रेता एप्लेट को और अधिक कठिन और अपरिहार्य बनाने के लिए अब युद्ध हारने के बाद इनका समर्थन करने के लिए समझ में नहीं आता है ... पल, प्रसंस्करण जे एस (या प्रसंस्करण 1.5) का उपयोग कर के बजाय आम तौर पर चीजों को वेब पर चलने वाले के लिए एक बेहतर विकल्प ... (see full text)

वहाँ कैसे पीएचपी का उपयोग करने के बारे में प्रसंस्करण विकि में इस लेख है फ़ाइलों को सर्वर पर सहेजें। यकीन नहीं है कि यह मदद कर सकता है।

http://wiki.processing.org/w/Saving_files_to_a_web-server

+0

धन्यवाद, मैं 3 लिंक नहीं बना सकता। –

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