2011-12-02 9 views
8

Użyłem Umbraco i jest tam bardzo ładna biblioteka ImageGen, która pozwala na zmianę rozmiaru zdjęć "w locie" i kasuje przetworzone obrazy.Którą darmową bibliotekę rozmiarów obrazu mogę użyć do zmiany rozmiaru i prawdopodobnie wyświetla obrazy?

Czy jest coś podobnego do tego, czego mogę użyć poza Umbraco?

(Myślałem, że mogę używać ImageGen bez Umbraco, ale wygląda na to, że nie jest za darmo)

Dzięki

+0

Czy jedna z tych odpowiedzi zawiera odpowiedź na pytanie? –

+0

ImageGen działa bez Umbraco, a darmowa wersja zapewnia zarabianie i zmianę rozmiaru po wyjęciu z pudełka. Używam go zi bez Umbraco, oba działają dobrze. – Astuanax

Odpowiedz

3

.NET Framework zawiera wsparcie dla zmiany rozmiaru obrazu.

Poniżej niektóre próbki kodu z mojej książki, Ultra-Fast ASP.NET:

using System; 
using System.Drawing; 
using System.Drawing.Imaging; 
using System.Drawing.Drawing2D; 
using System.IO; 

namespace Samples 
{ 
    public class ImageResizer 
    { 
     private static ImageCodecInfo jpgEncoder; 

     public static void ResizeImage(string inFile, string outFile, double maxDimension, long level) 
     { 
      // 
      // Load via stream rather than Image.FromFile to release the file 
      // handle immediately 
      // 
      using (Stream stream = new FileStream(inFile, FileMode.Open)) 
      { 
       using (Image inImage = Image.FromStream(stream)) 
       { 
        double width; 
        double height; 

        if (inImage.Height < inImage.Width) 
        { 
         width = maxDimension; 
         height = (maxDimension/(double)inImage.Width) * inImage.Height; 
        } 
        else 
        { 
         height = maxDimension; 
         width = (maxDimension/(double)inImage.Height) * inImage.Width; 
        } 
        using (Bitmap bitmap = new Bitmap((int)width, (int)height)) 
        { 
         using (Graphics graphics = Graphics.FromImage(bitmap)) 
         { 
          graphics.SmoothingMode = SmoothingMode.HighQuality; 
          graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; 
          graphics.DrawImage(inImage, 0, 0, bitmap.Width, bitmap.Height); 
          if (inImage.RawFormat.Guid == ImageFormat.Jpeg.Guid) 
          { 
           if (jpgEncoder == null) 
           { 
            ImageCodecInfo[] ici = ImageCodecInfo.GetImageDecoders(); 
            foreach (ImageCodecInfo info in ici) 
            { 
             if (info.FormatID == ImageFormat.Jpeg.Guid) 
             { 
              jpgEncoder = info; 
              break; 
             } 
            } 
           } 
           if (jpgEncoder != null) 
           { 
            EncoderParameters ep = new EncoderParameters(1); 
            ep.Param[0] = new EncoderParameter(Encoder.Quality, level); 
            bitmap.Save(outFile, jpgEncoder, ep); 
           } 
           else 
            bitmap.Save(outFile, inImage.RawFormat); 
          } 
          else 
          { 
           // 
           // Fill with white for transparent GIFs 
           // 
           graphics.FillRectangle(Brushes.White, 0, 0, bitmap.Width, bitmap.Height); 
           bitmap.Save(outFile, inImage.RawFormat); 
          } 
         } 
        } 
       } 
      } 
     } 

     public static void GetImageSize(string inFile, out int width, out int height) 
     { 
      using (Stream stream = new FileStream(inFile, FileMode.Open)) 
      { 
       using (Image src_image = Image.FromStream(stream)) 
       { 
        width = src_image.Width; 
        height = src_image.Height; 
       } 
      } 
     } 
    } 
} 
+0

Dzięki RickNZ, mogę go użyć, ale w tej chwili szukając rozwiązania z pudełka, mam nadzieję, że coś znajdę. – Burjua

+1

Również to rozwiązanie powoduje powstanie artefaktu o białym lub czarnym obramowaniu wokół obrazu. Musisz przekazać DrawImage i instancję ImageAttributes z zestawem ImageModeXY. –

+0

Nie mogę zgłosić tego błędu; Kod działa dobrze jak dla mnie, bez białych lub czarnych granic, zarówno dla obrazów GIF, jak i JPG. Jaki był twój przypadek testowy? – RickNZ

6

napisałem ImageResizer HttpModule, który jest darmowy, open-source i swobodnie obsługiwany przez StackOverflow imageresizer tag.

Ma 39 wtyczek, z których niektóre wymagają licencji, ale cały kod źródłowy do wszystkiego jest dostępny pod numerem http://imageresizing.net/download.

To works with all .NET CMSes, including Umbraco.

W przeciwieństwie do ImageGen jest zaprojektowany do skalowania do milionów obrazów.

+0

Czy możemy zrobić tego typu rzeczy w twojej bibliotece http://stackoverflow.com/questions/13548962/crop -usunięcie niepożądanej przestrzeni-na-krawędziach obrazu – user960567

+0

Oczywiście jest dostarczany jako wtyczka [WhitespaceTrimmer] (http: // resursing.net/plugins/whitespacetrimmer) –

+0

AKTUALIZACJA - ImageResizer nie jest już bezpłatny, to 170 USD/mo + – aron

9

Zdaję sobie sprawę, że to pytanie jest dość stare, ale ponieważ wciąż natknąłem się na to, myślałem, że powinienem opublikować moje wyniki.

http://imageprocessor.org/ wydaje się być stosunkowo nową biblioteką, która jest darmowa i open source, i ma sporo funkcji!

+0

Dziękuję za to bezpłatne narzędzie. Nie potrzebuje płatnej licencji; to wspaniale. –

+0

To wydaje się być idealne dla moich potrzeb. Jest również nieco bardziej popularny (czytaj: częściej zachowywany) niż ImageResizer, zgodnie ze swoimi stronami NuGet: https://www.nuget.org/packages/ImageResizer/ https://www.nuget.org/packages/ImageProcessor/ – sfarbota

+0

Po drugie to. Przechodzimy do imageprocessor, ponieważ nasze użycie z programem Imageresizer wymaga teraz licencji SaaS (7000 $ !!!) w nowej wersji. – DPac

Powiązane problemy