2011-09-06 12 views
15

क्या एमवीसी 3/रेजर में थंबनेल बनाने और छवियों का आकार बदलने का कोई आसान और गतिशील तरीका है? एक सहायक, मुक्ति, कुछ भी?एमवीसी 3/रेजर थंबनेल/छवि विचारों का आकार बदलें?

यह अच्छा होगा, अगर मैं किसी भी तरह से नियंत्रक से छवियों का आकार प्रबंधित कर सकता हूं। या यहां तक ​​कि razorview में। उदाहरण: इंडेक्स व्यू में मैं चाहता हूं कि छवियां एक निश्चित आकार हों, लेकिन विवरण में देखें कि मैं उन्हें पूर्ण आकार में रखना चाहता हूं।

मुझे पता है कि यह प्रश्न अस्पष्ट है, लेकिन मुझे वास्तव में पुरानी एमवीसी 1 चीज़ों के अलावा Google/stackoverflow पर कुछ भी नहीं मिला।

आप आम तौर पर इस से कैसे निपटते हैं?

उत्तर

10

इसके अलावा मेरे Simple.ImageResizer.MvcExtensions nuget पैकेज पर एक नज़र डालें।

डेमो यहाँ साइट: http://imageresizer.apphb.com/

एक ImageResult वर्ग है कि आप अपने नियंत्रक कार्रवाई है कि यह बहुत आसान अपने MVC साइट के लिए आकार बदलने छवि बनाने में सहायता एक ऊंचाई और चौड़ाई इनपुट लेता है में उपयोग कर सकते हैं जोड़ता है। आपको क्या लगता है यह सुनना अच्छा लगेगा

+0

इसे आज़माएगा। और अच्छा समय। क्योंकि मुझे जल्द ही एक अच्छा की आवश्यकता होगी। –

+1

ग्रेट। केवल इसे आज ही जोड़ा गया है लेकिन यदि आपको परेशानी हो रही है तो आप github रिपॉजिटरी में नमूना एमवीसी 4 साइट पा सकते हैं: https://github.com/terjetyl/Simple.ImageResizer – terjetyl

+0

धन्यवाद दोस्त .... –

25

क्या थंबनेल बनाने और MVC3/Razor में छवियों का आकार बदलने का एक आसान और गतिशील तरीका है? एक सहायक, मुक्ति, कुछ भी?

आप अंतर्निहित सिस्टम का उपयोग कर सकते हैं। इसे प्राप्त करने के लिए असेंबली और छवि वर्ग ड्रॉइंग। आप एक नियंत्रक कार्रवाई लिख सकते हैं जो छवि के नाम और वांछित नए आकार के तर्क के रूप में पारित किया जाएगा और यह नियंत्रक कार्रवाई आकार बदल जाएगी और नई छवि वापस कर देगी।

public ActionResult Thumbnail(int width, int height) 
{ 
    // TODO: the filename could be passed as argument of course 
    var imageFile = Path.Combine(Server.MapPath("~/app_data"), "test.png"); 
    using (var srcImage = Image.FromFile(imageFile)) 
    using (var newImage = new Bitmap(width, height)) 
    using (var graphics = Graphics.FromImage(newImage)) 
    using (var stream = new MemoryStream()) 
    { 
     graphics.SmoothingMode = SmoothingMode.AntiAlias; 
     graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; 
     graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; 
     graphics.DrawImage(srcImage, new Rectangle(0, 0, width, height)); 
     newImage.Save(stream, ImageFormat.Png); 
     return File(stream.ToArray(), "image/png"); 
    } 
} 

अब आगे बढ़ें और अपने ध्यान में रखते हुए इस कार्रवाई में शामिल हैं::

उदाहरण के लिए

<img src="@Url.Action("Thumbnail", "SomeController", new { width = 100, height = 50 })" alt="thumb" /> 
+0

स्वच्छ और सरल। धन्यवाद! –

+0

आपने url.Action का उपयोग किया था। मुझे यह HTML नहीं होना चाहिए.एक्शन? –

+2

@ कैस्पर स्कोव, नहीं, मैं किसी दिए गए क्रिया के निष्पादन को प्रस्तुत नहीं करना चाहता, मैं इस क्रिया का यूआरएल प्राप्त करना चाहता हूं, इसलिए सही है url.Action का उपयोग करना। Html.Action के बारे में अधिक पढ़ने के लिए आप निम्न ब्लॉग पोस्ट पर एक नज़र डाल सकते हैं: http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx –

4

इसके लिए एक पुस्तकालय है - यह MVC3 संगत है, और यह एक HttpModule के रूप में लागू होता है, ताकि यह बहुत अच्छा प्रदर्शन हो जाता है।

यह भी मुफ़्त है (हालांकि कुछ प्लगइन्स को 1-बार डेवलपर या व्यावसायिक लाइसेंस की आवश्यकता होती है)।

आप http://imageresizing.net

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

+0

मीठे! धन्यवाद! ........ –

+0

मैं इसे आजमा देना चाहता हूं, लेकिन मुझे '@ Url.Action' का उपयोग करके एएसपी एमवीसी व्यू में विधि को कॉल करने के तरीके पर कोई स्पष्ट कदम या ट्यूटोरियल नहीं मिला है, मैंने कोशिश की [यह ] (http://imageresizing.net/docs/v4) और [यह] (http://www.hanselman.com/blog/NuGetPackageOfWeek11ImageResizerEnablesCleanClearImageResizingInASPNET.aspx) लिंक? – stom

19

WebImage कक्षा का उपयोग System.Web.Helpers.WebImage में आता है जो आप इसे प्राप्त कर सकते हैं।

आप इस महान बच्चे का उपयोग फ्लाई पर आकार बदलने वाली छवियों को आउटपुट करने के लिए कर सकते हैं।

नमूना कोड:

public void GetPhotoThumbnail(int realtyId, int width, int height) 
{ 
    // Loading photos’ info from database for specific Realty... 
    var photos = DocumentSession.Query<File>().Where(f => f.RealtyId == realtyId); 

    if (photos.Any()) 
    { 
     var photo = photos.First(); 

     new WebImage(photo.Path) 
      .Resize(width, height, false, true) // Resizing the image to 100x100 px on the fly... 
      .Crop(1, 1) // Cropping it to remove 1px border at top and left sides (bug in WebImage) 
      .Write(); 
    } 

    // Loading a default photo for realties that don't have a Photo 
     new WebImage(HostingEnvironment.MapPath(@"~/Content/images/no-photo100x100.png")).Write(); 
} 

एक दृश्य में आप कुछ इस तरह होगा:

इसके बारे में
<img src="@Url.Action("GetPhotoThumbnail", 
    new { realtyId = item.Id, width = 100, height = 100 })" /> 

अधिक यहाँ: Resize image on the fly with ASP.NET MVC


मैं सिर्फ यह अच्छा पाया ASP.NET साइट पर WebImage के बारे में ट्यूटोरियल:

Working with Images in an ASP.NET Web Pages (Razor) Site

+2

यह मेरे लिए बल्कि अच्छा काम किया। एक चेतावनी यह है कि मैंने सर्वर पक्ष पर एक छोटा कैश लिखना समाप्त किया (लिखने() के बजाय सेव() का उपयोग करके), क्योंकि बड़ी तस्वीरों का आकार बदलना सीपीयू गहन था और मेरा एडब्ल्यूएस ईसी 2 माइक्रो इंस्टेंस जारी नहीं था। – DenNukem

+0

कुछ डीओएस हमलों को बनाने के लिए यह वास्तव में एक अच्छा vulnerabilitie है। – gog

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