उपलब्ध क्विक स्टार्ट:
एक इमेज अपलोड करें और क्लिप किया हुआ परिणाम प्राप्त करें:
$ curl https://hi.clippingmagic.com/api/v1/images \ -u 123:[secret] \ -F 'image=@example.jpeg' \ -F 'format=result' \ -F 'test=true' -o clipped.png
# Requires "requests" to be installed (see python-requests.org) import requests response = requests.post( 'https://hi.clippingmagic.com/api/v1/images', files={'image': open('example.jpeg', 'rb')}, data={ 'format': 'result', 'test': 'true' # TODO: Remove for production # TODO: Add more upload options here }, headers={ 'Authorization': 'Basic MTIzOltzZWNyZXRd' }, ) if response.status_code == requests.codes.ok: # Store these if you want to be able to use the Smart Editor image_id = response.headers['x-amz-meta-id'] image_secret = response.headers['x-amz-meta-secret'] with open('clipped.png', 'wb') as out: out.write(response.content) else: print("Error:", response.status_code, response.text)
// Requires "request" to be installed (see https://www.npmjs.com/package/request) var request = require('request'); var fs = require('fs'); request.post({ url: 'https://hi.clippingmagic.com/api/v1/images', formData: { image: fs.createReadStream('example.jpeg'), // TODO: Replace with your image format: 'result', test: 'true', // TODO: Remove for production // TODO: Add more upload options here }, auth: {user: '123', pass: '[secret]'}, followAllRedirects: true, encoding: null }, function(error, response, body) { if (error) { console.error('Request failed:', error); } else if (!response || response.statusCode != 200) { console.error('Error:', response && response.statusCode, body.toString('utf8')); } else { // Store these if you want to be able to use the Smart Editor let imageId = response.caseless.get('x-amz-meta-id'); let imageSecret = response.caseless.get('x-amz-meta-secret'); // Save result fs.writeFileSync("clipped.png", body); } });
$ curl https://hi.clippingmagic.com/api/v1/images \ -u 123:[secret] \ -F 'image.url=https://example.com/example.jpeg' \ -F 'format=result' \ -F 'test=true' -o clipped.png
# Requires "requests" to be installed (see python-requests.org) import requests response = requests.post( 'https://hi.clippingmagic.com/api/v1/images', data={ 'image.url': 'https://example.com/example.jpeg', 'format': 'result', 'test': 'true' # TODO: Remove for production # TODO: Add more upload options here }, headers={ 'Authorization': 'Basic MTIzOltzZWNyZXRd' }, ) if response.status_code == requests.codes.ok: # Store these if you want to be able to use the Smart Editor image_id = response.headers['x-amz-meta-id'] image_secret = response.headers['x-amz-meta-secret'] with open('clipped.png', 'wb') as out: out.write(response.content) else: print("Error:", response.status_code, response.text)
// Requires "request" to be installed (see https://www.npmjs.com/package/request) var request = require('request'); var fs = require('fs'); request.post({ url: 'https://hi.clippingmagic.com/api/v1/images', formData: { 'image.url': 'https://example.com/example.jpeg', // TODO: Replace with your image format: 'result', test: 'true', // TODO: Remove for production // TODO: Add more upload options here }, auth: {user: '123', pass: '[secret]'}, followAllRedirects: true, encoding: null }, function(error, response, body) { if (error) { console.error('Request failed:', error); } else if (!response || response.statusCode != 200) { console.error('Error:', response && response.statusCode, body.toString('utf8')); } else { // Store these if you want to be able to use the Smart Editor let imageId = response.caseless.get('x-amz-meta-id'); let imageSecret = response.caseless.get('x-amz-meta-secret'); // Save result fs.writeFileSync("clipped.png", body); } });
आपकी इमेज कैसे संसाधित होती है, इस पर आपको पूर्ण नियंत्रण देने के लिए बहुत से अपलोड कॉन्फ़िगरेशन विकल्प मौजूद हैं।
यदि आप id
और secret
को सेव करते हैं, तो आप परिणाम की समीक्षा करने के बाद भी होस्ट किए गए या व्हाइट लेबल संपादक का उपयोग कर सकते हैं।
प्रचालन का सिद्धांत
एक इमेज अपलोड करें और इमेज की पहचान करते id
और secret
को प्राप्त करें।
अपने मानव ऑपरेटर के लिए अपनी साइट पर एक रिटर्न URL एंडपॉइंट बनाएँ, जब वे कर चुके हों।
id
, secret
का इस्तेमाल करें और इमेज को क्लिप करने के लिए अपने मानव ऑपरेटर के लिए होस्टेड एडिटर URL बनाने के लिए URL लौटाएँ।
आपका मानव ऑपरेटर होस्टेड एडिटर URL तक जाता है और इमेज को क्लिप करता है।
जब आपका मानव ऑपरेटर काम कर लेता है तो उनका ब्राउज़र आपके रिटर्न URL पर HTTP POST इशु करता है clippingMagicJson
पैरामीटर को पार्स करें और नये उपलब्ध परिणामों को डाउनलोड करें।
# Requires "requests" to be installed (see python-requests.org) import requests import json from urllib.parse import quote # Python 3, urllib.quote for Python 2 response = requests.post( 'https://hi.clippingmagic.com/api/v1/images', files={'image': open('example.jpeg', 'rb')}, data={ 'format': 'json', 'test': 'true' # TODO: Remove for production # TODO: Add more upload options here }, headers={ 'Authorization': 'Basic MTIzOltzZWNyZXRd' }, ) if response.status_code == requests.codes.ok: r = json.loads(response.content) # TODO: Store these imageId = r["image"]["id"]; imageSecret = r["image"]["secret"]; print("Result", r, imageId, imageSecret); # Create Hosted Editor URL returnUrl = 'https://hi.clippingmagic.com/api/returnUrlExample' # TODO: Replace with your own hostedEditorUrl = 'https://hi.clippingmagic.com/api/v1/hosted/123' + \ '?images=' + str(imageId) + ':' + imageSecret + \ '&returnUrl=' + quote(returnUrl) print("Hosted Editor URL", hostedEditorUrl) else: print("Error:", response.status_code, response.text)
// Requires "request" to be installed (see https://www.npmjs.com/package/request) var request = require('request'); var fs = require('fs'); request.post({ url: 'https://hi.clippingmagic.com/api/v1/images', formData: { image: fs.createReadStream('example.jpeg'), // TODO: Replace with your image format: 'json', test: 'true', // TODO: Remove for production // TODO: Add more upload options here }, auth: {user: '123', pass: '[secret]'}, }, function(error, response, body) { if (error) { console.error('Request failed:', error); } else if (!response || response.statusCode != 200) { console.error('Error:', response && response.statusCode, body.toString('utf8')); } else { let r = JSON.parse(body); // TODO: Store these let imageId = r.image.id; let imageSecret = r.image.secret; console.log("Result", r, imageId, imageSecret); // Create Hosted Editor URL let returnUrl = 'https://hi.clippingmagic.com/api/returnUrlExample'; // TODO: Replace with your own let hostedEditorUrl = 'https://hi.clippingmagic.com/api/v1/hosted/123' + '?images=' + imageId + ':' + imageSecret + '&returnUrl=' + encodeURIComponent(returnUrl); console.log("Hosted Editor URL", hostedEditorUrl); } });
# Requires "requests" to be installed (see python-requests.org) import requests import json from urllib.parse import quote # Python 3, urllib.quote for Python 2 response = requests.post( 'https://hi.clippingmagic.com/api/v1/images', data={ 'image.url': 'https://example.com/example.jpeg', 'format': 'json', 'test': 'true' # TODO: Remove for production # TODO: Add more upload options here }, headers={ 'Authorization': 'Basic MTIzOltzZWNyZXRd' }, ) if response.status_code == requests.codes.ok: r = json.loads(response.content) # TODO: Store these imageId = r["image"]["id"]; imageSecret = r["image"]["secret"]; print("Result", r, imageId, imageSecret); # Create Hosted Editor URL returnUrl = 'https://hi.clippingmagic.com/api/returnUrlExample' # TODO: Replace with your own hostedEditorUrl = 'https://hi.clippingmagic.com/api/v1/hosted/123' + \ '?images=' + str(imageId) + ':' + imageSecret + \ '&returnUrl=' + quote(returnUrl) print("Hosted Editor URL", hostedEditorUrl) else: print("Error:", response.status_code, response.text)
// Requires "request" to be installed (see https://www.npmjs.com/package/request) var request = require('request'); var fs = require('fs'); request.post({ url: 'https://hi.clippingmagic.com/api/v1/images', formData: { 'image.url': 'https://example.com/example.jpeg', // TODO: Replace with your image format: 'json', test: 'true', // TODO: Remove for production // TODO: Add more upload options here }, auth: {user: '123', pass: '[secret]'}, }, function(error, response, body) { if (error) { console.error('Request failed:', error); } else if (!response || response.statusCode != 200) { console.error('Error:', response && response.statusCode, body.toString('utf8')); } else { let r = JSON.parse(body); // TODO: Store these let imageId = r.image.id; let imageSecret = r.image.secret; console.log("Result", r, imageId, imageSecret); // Create Hosted Editor URL let returnUrl = 'https://hi.clippingmagic.com/api/returnUrlExample'; // TODO: Replace with your own let hostedEditorUrl = 'https://hi.clippingmagic.com/api/v1/hosted/123' + '?images=' + imageId + ':' + imageSecret + '&returnUrl=' + encodeURIComponent(returnUrl); console.log("Hosted Editor URL", hostedEditorUrl); } });
आपकी इमेज कैसे संसाधित होती है, इस पर आपको पूर्ण नियंत्रण देने के लिए बहुत से अपलोड कॉन्फ़िगरेशन विकल्प मौजूद हैं।
पूरी गहराई से जानकारी के लिए पूरी होस्टेड एडिटर दस्तावेज़ों को देखें।
जब आपका मानव ऑपरेटर काम कर लेता है तो उनका ब्राउज़र आपके रिटर्न URL पर HTTP POST इशु करता है clippingMagicJson
पैरामीटर को पार्स करें और नये उपलब्ध परिणामों को डाउनलोड करें।
from flask import Flask, request import requests import json app = Flask(__name__) @app.route('/cmReturnUrl', methods=['POST']) def cmReturnUrl(): cm = json.loads(request.form['clippingMagicJson']) if cm["event"] == 'editor-exit': for im in cm["clipped"]: response = requests.get('https://hi.clippingmagic.com/api/v1/images/' + str(im["id"]), headers={ 'Authorization': 'Basic MTIzOltzZWNyZXRd'}) if response.status_code == requests.codes.ok: with open('clipped-' + str(im["id"]) + '.png', 'wb') as out: out.write(response.content) else: print("Error " + str(im["id"]) + ": ", response.status_code, response.text) # TODO: Handle cm["skipped"] images elif cm["event"] == 'error': print("Error: ", cm["error"]["code"], cm["error"]["message"]) return ''
// Using the ExpressJS framework: var express = require('express'); var bodyParser = require('body-parser'); var request = require('request'); var fs = require('fs'); var app = express(); app.use(bodyParser.urlencoded({ extended: true })); var port = process.env.PORT || 8080; app.post('/cmReturnUrl', function(req, res) { let cm = JSON.parse(req.body.clippingMagicJson); switch (cm.event) { case "editor-exit": for (let im of cm.clipped) { request.get({ url: 'https://hi.clippingmagic.com/api/v1/images/' + im.id, auth: {user: '123', pass: '[secret]'}, encoding: null, }, function(error, response, body) { if (error) { console.error('Request failed:', error); } else if (!response || response.statusCode != 200) { console.error('Error:', response && response.statusCode, body.toString('utf8')); } else { // Save result fs.writeFileSync("clipped-" + im.id + ".png", body); } }); } // TODO: Handle cm.skipped images break; case "error": console.error("Error: ", cm.error.code, cm.error.message); break; } res.send(""); // Response is ignored }); app.listen(port); // start the server console.log('Server started! At http://localhost:' + port);
रिटर्न URL के लिए पूर्ण दस्तावेज़ देखें।
clippingMagicJson
इसमें डीकोड करता है:
{ "event" : "editor-exit", "images" : [ { "id" : 2345, "secret" : "image_secret" } ], "clipped" : [ { "id" : 2345, "secret" : "image_secret" } ], "skipped" : [ ] }
clippingMagicJson
इसमें डीकोड करता है:
{ "event" : "error", "error" : { "status" : 400, "code" : 1234, "message" : "Example error" }, "images" : [ { "id" : 2345, "secret" : "image_secret" } ], "clipped" : [ ], "skipped" : [ { "id" : 2345, "secret" : "image_secret" } ] }
प्रचालन का सिद्धांत
एक इमेज अपलोड करें और इमेज की पहचान करते id
और secret
को प्राप्त करें।
अपने वेब पेज पर व्हाइट लेबल संपादक को एम्बेड करें जहां आपका मानव ऑपरेटर इमेज को क्लिप कर सकता है।
क्लिपिंग प्रगति के बारे में जानकारी प्राप्त करने और नए परिणाम डाउनलोड करने के लिए callback
का इस्तेमाल करें।
# Requires "requests" to be installed (see python-requests.org) import requests import json response = requests.post( 'https://hi.clippingmagic.com/api/v1/images', files={'image': open('example.jpeg', 'rb')}, data={ 'format': 'json', 'test': 'true' # TODO: Remove for production # TODO: Add more upload options here }, headers={ 'Authorization': 'Basic MTIzOltzZWNyZXRd' }, ) if response.status_code == requests.codes.ok: r = json.loads(response.content) # TODO: Store these imageId = r["image"]["id"]; imageSecret = r["image"]["secret"]; print("Result", r, imageId, imageSecret); else: print("Error:", response.status_code, response.text)
// Requires "request" to be installed (see https://www.npmjs.com/package/request) var request = require('request'); var fs = require('fs'); request.post({ url: 'https://hi.clippingmagic.com/api/v1/images', formData: { image: fs.createReadStream('example.jpeg'), // TODO: Replace with your image format: 'json', test: 'true', // TODO: Remove for production // TODO: Add more upload options here }, auth: {user: '123', pass: '[secret]'}, }, function(error, response, body) { if (error) { console.error('Request failed:', error); } else if (!response || response.statusCode != 200) { console.error('Error:', response && response.statusCode, body.toString('utf8')); } else { let r = JSON.parse(body); // TODO: Store these let imageId = r.image.id; let imageSecret = r.image.secret; console.log("Result", r, imageId, imageSecret); } });
# Requires "requests" to be installed (see python-requests.org) import requests import json response = requests.post( 'https://hi.clippingmagic.com/api/v1/images', data={ 'image.url': 'https://example.com/example.jpeg', 'format': 'json', 'test': 'true' # TODO: Remove for production # TODO: Add more upload options here }, headers={ 'Authorization': 'Basic MTIzOltzZWNyZXRd' }, ) if response.status_code == requests.codes.ok: r = json.loads(response.content) # TODO: Store these imageId = r["image"]["id"]; imageSecret = r["image"]["secret"]; print("Result", r, imageId, imageSecret); else: print("Error:", response.status_code, response.text)
// Requires "request" to be installed (see https://www.npmjs.com/package/request) var request = require('request'); var fs = require('fs'); request.post({ url: 'https://hi.clippingmagic.com/api/v1/images', formData: { 'image.url': 'https://example.com/example.jpeg', // TODO: Replace with your image format: 'json', test: 'true', // TODO: Remove for production // TODO: Add more upload options here }, auth: {user: '123', pass: '[secret]'}, }, function(error, response, body) { if (error) { console.error('Request failed:', error); } else if (!response || response.statusCode != 200) { console.error('Error:', response && response.statusCode, body.toString('utf8')); } else { let r = JSON.parse(body); // TODO: Store these let imageId = r.image.id; let imageSecret = r.image.secret; console.log("Result", r, imageId, imageSecret); } });
आपकी इमेज कैसे संसाधित होती है, इस पर आपको पूर्ण नियंत्रण देने के लिए बहुत से अपलोड कॉन्फ़िगरेशन विकल्प मौजूद हैं।
अपने वेब पेज़ पर ClippingMagic.js
को कॉल करें, और अपलोड से प्राप्त वैल्यूज़ के साथ हार्डकोर्ड किये गये id
और secret
को बदलें:
<script src="https://clippingmagic.com/api/v1/ClippingMagic.js" type="text/javascript"></script> <script type="text/javascript"> function myCallback(opts) { // TODO: Replace this with your own functionality switch (opts.event) { case "error": alert("An error occurred: " + opts.error.status + ", " + opts.error.code + ", " + opts.error.message); break; case "result-generated": alert("Generated a result for " + opts.image.id + ", " + opts.image.secret); break; case "editor-exit": alert("The editor dialog closed"); break; } } var errorsArray = ClippingMagic.initialize({apiId: 123}); if (errorsArray.length > 0) alert("Sorry, your browser is missing some required features: \n\n " + errorsArray.join("\n ")); else ClippingMagic.edit({ "image" : { "id" : 2345, "secret" : "image_secret" }, "useStickySettings" : true, "locale" : "hi-IN" }, myCallback); </script>
आप डाउनलोड सर्वर API का इस्तेमाल करके फिर आप अब नये उपलब्ध परिणामों को डाउनलोड कर सकते हैं।
व्हाइट लेबल एडीटर के लिए सम्पूर्ण दस्तावेज़ देखें।