2011-10-26 12 views
7

मुझे क्लाइंट पक्ष में एक छवि फसल के लिए एक ऐप चाहिए, मेरा मतलब है, जेक्रॉप jQuery प्लगइन जैसे फसल टूल का उपयोग करना।एक फसल उपकरण का उपयोग कर छवि फसल के लिए Django ऐप

लेकिन पिछले दो व्यवस्थापक की निर्भर करता है और दो पहले बहुत वहाँ के लिए युग्मित लगते:

मैं इस उपकरण पाया अपनी छवि फ़ील्ड और मॉडल, कोई अच्छा समाधान?

हम कई सुविधाओं के साथ एक बड़ा अनुप्रयोग पर काम कर रहे बहुत मुश्किल परिवर्तन तर्क writed

+1

django-image-cropping के बारे में: यदि आप ImageCropField (https://github.com/jonasundderwolf/django-image-cropping/blob/master/image_cropping/fields.py) देखते हैं तो आप देखेंगे कि यह मूल रूप से मानक छवि फ़ील्ड लेता है और केवल व्यवस्थापक के लिए विजेट जोड़ता है। और ImageRatioField निर्देशांक को अल्पविराम से अलग तारों के रूप में संग्रहीत करता है, इसलिए यह pastylegs के सुझाव से बहुत अलग नहीं है। तो आप ImageCropField के रूप में किसी मौजूदा ऐप में मानक छवि फ़ील्ड को आसानी से पुनः प्राप्त करने में सक्षम होना चाहिए। या आपकी चिंताओं क्या हैं ("बहुत युग्मित")? – arie

उत्तर

16

मुझे लगता है कि यह कुछ ऐसा है तो आप शायद अपने आप को लेखन को सबसे अच्छा होगा कि आपके डेटा और मॉडल हैं पर निर्भर करता है के रूप में यह है यदि आप मूल रखना चाहते हैं, तो आप (और कहां) फसलों को सहेजना चाहते हैं, भले ही आपके पास एक बड़ा ऐप हो, फिर भी आप अपने कोड में जो कुछ भी चाहते हैं उसे करने के लिए अन्य कोड मोड़ने की कोशिश करने में अधिक समय व्यतीत करेंगे परिस्थिति।

: -

(इस कोड है बहुत किसी न किसी तरह मैं सिर्फ बाहर चरणों वास्तव में बिछाने हूँ) आप एक imagefield के साथ एक मॉडल है, तो आप फसली छवि धारण करने के लिए एक दूसरी छवि क्षेत्र जोड़ सकता है

class MyModel(models.Model): 
    image = models.ImageField(...) 
    image_crop = models.ImageField(...) 

और जेसीआरपी निर्देशांक को पकड़ने के लिए एक अतिरिक्त फ़ील्ड वाला एक फॉर्म जो क्लाइंट साइड पर फॉर्म में पॉप्युलेट किया जाएगा (फ़ील्ड छुपाया जाएगा)। क्षेत्र में निर्देशांक को आप किस रूप में सहेजते हैं, यह आपके ऊपर है, लेकिन यह एक जेसन डिक्शनरी (क्लाइंट साइड पर जेसन.जेएस और सर्वर साइड पर सरलजॉन) का उपयोग करने का विचार हो सकता है, जैसे:

{ 'x1' : '145', 'y1' : '200' ... } 

प्रपत्र:

class MyModelForm(form.ModelForm): 
    """ Hide a field to hold the coordinates chosen by the user """ 
    crop_coords = forms.CharField(attrs={'style':'display:none'})   

    class Meta: 
     model = MyModel 

एक राय यह है कि यह सब संसाधित करता है:

def some_view(request): 
    form = request.POST 
    if form.is_valid(): 
     crop_coords = form.cleaned_data['crop_coords'] 
     # decode the coords using simpleson (or however you passed them) 
     ... 
     # create a cropped image 
     original_image = form.cleaned_data['image'] 
     cropped_image = cropper(original_image.path, crop_coords) 
     ... 
     # save it back to the db - http://stackoverflow.com/questions/1308386/programmatically-saving-image-to-django-imagefield 
     ... 

और एक समारोह जनहित याचिका का उपयोग कर फसली छवि बनाने के लिए:

# Look here: http://djangosnippets.org/snippets/224/ 
def cropper(original_image_path, crop_coords): 
    """ Open original, create and return a new cropped image 
    ... 
संबंधित मुद्दे