Walę się w tę twarz dosłownie od kilku dni i chociaż ciągle czuję, że jestem na skraju objawienia, po prostu nie mogę osiągnąć celu.
Pomyślałem z wyprzedzeniem w fazach koncepcyjnych mojego projektu, że trywialne byłoby uchwycenie obrazu z aparatu lub biblioteki iPhone'a, przeskalowanie go do określonej wysokości, przy użyciu funkcji równoważnej opcji wypełniania proporcji UIImageView (w całości w kodzie), a następnie przyciąć wyłączyć wszystko, co nie pasuje w upłynął CGRect.
Uzyskanie oryginalnego obrazu z kamery lub biblioteki było banalne. Jestem zszokowany, jak trudne okazały się pozostałe dwa kroki.
Załączony obraz pokazuje, co próbuję osiągnąć. Czy ktoś mógłby być na tyle miły, by trzymać mnie za rękę? Każdy przykład kodu, który do tej pory znalazłem, wydaje się rozbijać obraz, być do góry nogami, wyglądać jak bzdury, rysować poza granicami lub w inny sposób po prostu nie działać poprawnie.
źródło
Odpowiedzi:
Potrzebowałem tego samego - w moim przypadku, aby wybrać wymiar, który pasuje po skalowaniu, a następnie przyciąć każdy koniec, aby dopasować resztę do szerokości. (Pracuję w układzie poziomym, więc mogłem nie zauważyć żadnych niedociągnięć w trybie portretowym.) Oto mój kod - jest częścią strategii na UIImage. Rozmiar docelowy w moim kodzie jest zawsze ustawiony na pełny ekran urządzenia.
źródło
Starszy post zawiera kod metody zmiany rozmiaru twojego UIImage. Odpowiednia część jest następująca:
Jeśli chodzi o kadrowanie, uważam, że jeśli zmienisz metodę, aby użyć innego rozmiaru dla skalowania niż dla kontekstu, wynikowy obraz powinien zostać przycięty do granic kontekstu.
źródło
originalImage
. Dzięki.UIGraphicsBeginImageContextWithOptions(newSize, 1.0f, 0.0f);
. (wyjaśniono tutaj: stackoverflow.com/questions/4334233/... )Proponuję ten. Czy ona nie jest pięknością? ;)
źródło
Jest świetny kawałek kodu związany ze zmianą rozmiaru obrazów + kilka innych operacji. Obejrzałem ten, próbując dowiedzieć się, jak zmienić rozmiar zdjęć ... http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/
źródło
Proszę bardzo. Ten jest idealny ;-)
EDYCJA: patrz poniżej komentarz - „Nie działa z niektórymi obrazami, kończy się niepowodzeniem z: CGContextSetInterpolationQuality: nieprawidłowy kontekst 0x0 błąd”
źródło
To jest wersja odpowiedzi Jane Sales w Swift. Twoje zdrowie!
źródło
Zmodyfikowałem Kod Brada Larsona. Będzie wypełniał obraz w danym prostokącie.
źródło
Wersja Xamarin.iOS dla akceptowanej odpowiedzi dotyczącej zmiany rozmiaru, a następnie przycięcia obrazu UIImage (wypełnienie aspektu) znajduje się poniżej
źródło
Przekształciłem przewodnik Sama Wircha w szybki i zadziałało to dla mnie dobrze, chociaż na końcowym obrazie jest pewne bardzo „zgniecenie”, którego nie mogłem rozwiązać.
Jeśli ktoś chce wersję C celu, jest na swojej stronie internetowej.
źródło
Odkryłem, że Swift 3 opublikowany przez Evgenii Kanvets nie skaluje obrazu w jednolity sposób.
Oto moja wersja Swift 4 funkcji, która nie psuje obrazu:
źródło
UIGraphicsBeginImageContextWithOptions
ale inne działały idealnie. Dzięki!Poniższy prosty kod działał dla mnie.
źródło
UIImageView
obiektów. To pytanie dotyczy jednak skalowania samegoUIImage
obiektu.dzięki temu możesz wykonać zrzuty ekranu na swoje zdjęcie
źródło
Poniżej przykład pracy: Lewy obraz - (obraz źródłowy); Właściwy obraz ze skalą x2
Jeśli chcesz skalować obraz, ale zachować jego ramkę (proporcje), wywołaj metodę w ten sposób:
źródło
Wydaje się, że to pytanie zostało uspokojone, ale w moim poszukiwaniu rozwiązania, które łatwiej byłoby zrozumieć (i napisane w Swift), doszedłem do tego (napisałem również: Jak przyciąć magię UIImage? )
Chciałem móc kadrować z regionu opartego na współczynniku kształtu i skalować do rozmiaru opartego na zewnętrznym zasięgu. Oto moja odmiana:
Jest kilka rzeczy, które uznałem za mylące, oddzielne obawy dotyczące kadrowania i zmiany rozmiaru. Kadrowanie jest obsługiwane przez początek prostokąta, który przekazujesz do drawInRect, a skalowanie jest obsługiwane przez część rozmiaru. W moim przypadku musiałem powiązać rozmiar prostownika przycinania na źródle z moim odbiciem wyjściowym o tym samym współczynniku kształtu. Współczynnik skali jest następnie wyprowadzany / wprowadzany i należy to zastosować do drawRect (przekazanego do drawInRect).
Jednym zastrzeżeniem jest to, że takie podejście skutecznie zakłada, że rysowany obraz jest większy niż kontekst obrazu. Nie testowałem tego, ale myślę, że możesz użyć tego kodu do obsługi kadrowania / powiększania, ale jawnie definiując parametr skali jako wyżej wspomniany parametr skali. Domyślnie UIKit stosuje mnożnik oparty na rozdzielczości ekranu.
Na koniec należy zauważyć, że to podejście UIKit jest wyższe niż podejście CoreGraphics / Quartz i Core Image i wydaje się, że rozwiązuje problemy z orientacją obrazu. Warto również wspomnieć, że jest dość szybki, po ImageIO, zgodnie z tym postem tutaj: http://nshipster.com/image-resizing/
źródło
Wersja szybka:
źródło
Oto wersja Swift 3 przewodnika Sama Wircha po swift opublikowanego przez Williama T.
źródło