2012-07-04 14 views
5

के बाद गुणवत्ता खो देता है मैं वर्तमान में छवियों को घुमाने के लिए जीडी और कुछ PHP का उपयोग कर रहा हूं। प्रत्येक घूर्णन के बाद छवि की गुणवत्ता खराब हो जाती है। क्या ऐसा करने का कोई बेहतर तरीका है या यह उम्मीद है?PHP छवि घुमाव प्रत्येक रोटेशन

$img = new ImageClass; 
    list($original, $info) = $img->load($src); 

    // Determine angle 
    $angle = strtolower($angle); 
    if($angle == 'cw' || $angle == 'clockwise') $angle = 270; 
    if($angle == 'ccw' || $angle == 'counterclockwise') $angle = 90; 

    $rgb = $img->hex2rgb($bg_color); 
    $bg_color = imagecolorallocate($original, $rgb['r'], $rgb['g'], $rgb['b']); 

    $new = imagerotate($original, $angle, $bg_color); 

क्या छवि क्लाइंट पक्ष को शायद jquery के साथ घूमना संभव है और फिर छवि को PHP से सर्वर पर सहेजना संभव है? मुझे लगता है कि यह छवि की गुणवत्ता में मदद करेगा।

उत्तर

4

हमारी साझा सेवा में हम इसे अलग-अलग संभालते हैं। हम मूल छवि को हर समय रखते हैं और प्रारंभिक रोटेशन (0) स्टोर करते हैं।

रोटेशन पर, मूल छवि लोड हो जाती है, घूर्णन +/- 9 0 के अनुसार घुमाया जाता है और एक प्रति फ़ाइल सिस्टम पर लिखा जाता है। बाद में डेटाबेस को नए घूर्णन के साथ अद्यतन किया जाता है।

घूर्णन और घुमावदार प्रति स्थान के लिए, आपको अपने डेटाबेस में दो और कॉलम की आवश्यकता होगी। मैं यह भी मान रहा हूं कि आप हमेशा प्रारंभिक आकार (और शायद विभिन्न आकारों के लिए एकाधिक) करते हैं, ताकि अतिरिक्त कॉलम हमेशा घुमाए जाने तक मूल को इंगित करने के बजाय प्रतिलिपि को इंगित करता है।

+0

यह भी है कि iPhoto कैसे काम करता है। – dkamins

3

यदि आप एक सीमित मैट्रिक्स में एक छवि घुमाते हैं, तो आप गुणवत्ता, सर्वर पक्ष या क्लाइंट पक्ष के अवक्रमण से बच नहीं सकते हैं और उन अवक्रमण प्रत्येक घूर्णन पर जोड़े जाते हैं।

यदि आपको एक ही से कई घुमावदार छवियों की आवश्यकता है, तो आपको हमेशा स्रोत के रूप में पहली (कभी घुमाया नहीं गया) छवि का उपयोग करना चाहिए और अंतिम घुमावदार छवि को घुमाने के बजाय कोण को बढ़ा देना चाहिए।

+0

, जब मैं जेएस या सीएसएस के माध्यम से mages क्लाइंट-साइड घुमाए जाते हैं, ब्राउजर मूल रूप से जैक के जवाब में वर्णन करता है। तो आप जितनी बार चाहें उतनी बार एक छवि को फिर से घुमा सकते हैं या बस इसे अतिरिक्त कताई के साथ घटने के बारे में चिंता किए बिना लगातार कताई कर सकते हैं। –

+0

आप भी एक ही छवि क्लाइंट पक्ष के कई बार घूम सकते हैं ... –

+0

किसी भी सुझाए गए क्लाइंट साइड स्क्रिप जो इस तरह की चीज करते हैं? – Paul

1

हर बार जब आप एक जेपीजी बचाते हैं, तो आप गुणवत्ता खो देंगे। यह एक "हानिकारक" प्रारूप है। यदि आप पीएनजी का उपयोग करते हैं, तो आप शून्य गुणवत्ता हानि के साथ जितनी बार चाहें उतना बार घूम सकते हैं, क्योंकि यह एक "लापरवाही" प्रारूप है।

+1

नहीं। यह सच है कि जेपीईजी की बचत गुणवत्ता हानि में जोड़ती है लेकिन आप गुणवत्ता हानि के बिना एक छवि (कुछ दुर्लभ स्थितियों को छोड़कर) घुमा नहीं सकते हैं। –

1

कुछ बिंदुओं

  • रूप dystroy लिखा था, रोटेशन हानिपूर्ण जब संकुचित छवियों पर इस्तेमाल किया है
  • clientside रोटेशन आमतौर पर एक छवि हेरफेर लेकिन ध्यान में रखते हुए छवि वस्तु के रोटेशन नहीं है, इसलिए जब आप यह सर्वर से भेजने के लिए, यह मूल छवि
  • ImageMagick परिवर्तनों पर जीडी की तुलना में बेहतर परिणाम देने के लिए अफवाह है हो जाएगा वास्तव में (http://de.php.net/imagick देखें)
संबंधित मुद्दे