Przesyłam starą stronę eCommerce do MVC 3 i chciałbym skorzystać z ulepszeń projektu. Witryna ma obecnie obrazy produktów przechowywane w 3 rozmiarach: miniaturowym, średnim (do wyświetlenia na liście) i rozwiniętym dla powiększonego wyglądu. W tej chwili musimy przesłać 3 osobne obrazy o dokładnie dopasowanym rozmiarze, podać 3 różne nazwy, które pasują do oczekiwań witryny itp., To jest ból.
Chciałbym przesłać tylko 1 plik, duży, a następnie pozwolić stronie zmniejszyć go do potrzebnych rozmiarów, i chciałbym mieć swobodę zmiany rozmiaru miniatury i listy w zależności od preferencji użytkownika, formatu (np. Na telefon komórkowy, iPada , pulpit) itp., więc może potrzebować wielu kopii tego samego obrazu. Moje pytanie brzmi: czy obraz powinien zostać zmniejszony, a następnie zapisany kilka razy po przesłaniu, a jeśli tak, jaka jest dobra konwencja przechowywania / nazewnictwa?
Innym pomysłem jest przechowywanie tylko jednego obrazu, ale programowa zmiana jego wielkości przed podaniem go klientowi. Czy ktoś to zrobił i jakie są wady oprócz kilku kolejnych cykli maszynowych? W jaki sposób przekazujesz klientowi tymczasowy obraz w pamięci (nie ma adresu URL)?
źródło
ImageProcessor
Imageprocessor to lekka, rozszerzalna biblioteka napisana w C #, która pozwala na manipulowanie obrazami w locie za pomocą .NET
Zmiana rozmiaru w locie:
ImageProcessor.Web jest standardowo wyposażony w buforowanie . Każdy przetworzony obraz jest asynchronicznie buforowany zarówno w przeglądarce, jak i na serwerze przez wybrany przez Ciebie czas. Pamięć podręczna serwera inteligentnie przechowuje miliony obrazów i po cichu aktualizuje się, gdy oryginalny obraz ulegnie zmianie lub pamięć podręczna wygasa.
źródło
Zakładając, że miniatura jest po prostu przeskalowaną wersją głównego obrazu, myślę, że należy to zrobić w czasie przesyłania, ale być może zaplanowane jako zadanie w tle, aby nie wpływać na inne procesy. Jeśli zmieniasz rozmiar w locie, pamiętaj o buforowaniu obrazu.
Najważniejsze w tym wszystkim jest to, że najlepszą miniaturą dla niektórych obrazów nie jest zwykła zmiana rozmiaru wzorca; konieczne może być powiększanie i kadrowanie w sposób sterowany przez człowieka. Możesz chcieć wykonać automatyczną zmianę rozmiaru, ale masz mechanizm, który pozwala na przesłonięcie w tych szczególnych przypadkach.
źródło
Niewielka różnica w tym, o czym wspomniał Adam:
(1) utwórz niestandardową stronę błędu (reguła dla obrazów)
(2) Struktura nazw plików obrazów powinna być:
Jedynym wyjątkiem jest oryginalny obraz, który powinien mieć nazwę:
(3) Po przesłaniu pliku, np .: 1245_Original -> wszystkie pliki z 1245_ * powinny zostać usunięte
(4) Niestandardowa strona błędu (zakładając, że 1245_Original Exists) powinna dynamicznie tworzyć żądany plik obrazu, np .:
i też podajcie to za pierwszym razem.
W efekcie przesłanie nowego obrazu powoduje wyczyszczenie pamięci podręcznej.
źródło