W wielu postach widziałem zmiany rozmiaru obrazu poprzez zachowanie proporcji. Te funkcje wykorzystują stałe punkty (szerokość i wysokość) dla RECT podczas zmiany rozmiaru. Ale w moim projekcie muszę zmienić rozmiar widoku na podstawie samej szerokości, wysokość powinna być pobierana automatycznie na podstawie współczynnika proporcji. ktoś pomoże mi to osiągnąć.
136
newWidth
tutaj zmiennej, ona już jesti_width
.UIGraphicsBeginImageContextWithOptions(CGSizeMake(newWidth, newHeight), NO, 0);
, a następnieUIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight));
Jeśli nie wiesz, czy obraz będzie portretowy czy poziomy (np. Użytkownik robi zdjęcie aparatem), stworzyłem inną metodę, która przyjmuje maksymalne parametry szerokości i wysokości.
Powiedzmy, że masz
UIImage *myLargeImage
stosunek 4: 3.Zmieniony rozmiar UIImage będzie wynosił 1024x768, jeśli jest ustawiony poziomo; 768x1024, jeśli portret. Ta metoda wygeneruje również obrazy o wyższej rozdzielczości do wyświetlania siatkówki.
źródło
min(ratioX, ratioY)
. W przeciwnym razie, jeśli szerokość jest większa, może nie pasować do maksymalnej wysokości.Najlepsza odpowiedź Maverick 1st's poprawnie przetłumaczona na Swift (działa z najnowszym Swift 3 ):
źródło
dzięki @ Maverick1st algorytm, zaimplementowałem go
Swift
, w moim przypadku wysokość jest parametrem wejściowymźródło
Ta metoda jest kategorią w UIImage. Czy skaluje się, aby zmieścić się w kilku wierszach kodu za pomocą AVFoundation. Nie zapomnij zaimportować
#import <AVFoundation/AVFoundation.h>
.źródło
Szybka 5 wersja dopasowania proporcji do wysokości , na podstawie odpowiedzi @ János
Używa nowoczesnego
UIGraphicsImageRenderer
interfejsu API, więc poprawnyUIImage
jest gwarantowany.Można tego używać w połączeniu z zasobem obrazu PDF (opartym na wektorach), aby zachować jakość przy dowolnym rozmiarze renderowania.
źródło
Najprostszym sposobem jest ustawienie swojej ramki
UIImageView
i ustawienie nacontentMode
jedną z opcji zmiany rozmiaru.Kod wygląda następująco - Można go użyć jako metody narzędziowej -
źródło
Programowo:
Storyboard:
źródło
Cóż, mamy tutaj kilka dobrych odpowiedzi dotyczących zmiany rozmiaru obrazu, ale po prostu modyfikuję zgodnie z potrzebami. mam nadzieję, że pomoże to komuś takiemu jak ja.
Moje wymaganie było
Możesz również chcieć to sprawdzić w celu obliczenia zmiany rozmiaru.
źródło
Po prostu zaimportuj AVFoundation i użyj
AVMakeRectWithAspectRatioInsideRect(CGRectCurrentSize, CGRectMake(0, 0, YOUR_WIDTH, CGFLOAT_MAX)
źródło
Aby poprawić odpowiedź Ryana:
źródło
Gdy skala jest ustawiona na 0,0, używany jest współczynnik skalowania głównego ekranu, który w przypadku wyświetlaczy Retina wynosi 2,0 lub więcej (3,0 w przypadku iPhone 6 Plus).
źródło
Rozwiązanie Ryana @Ryan w szybkim kodzie
posługiwać się:
źródło
W Swift 3 są pewne zmiany. Oto rozszerzenie do UIImage:
źródło
Zeeshan Tufail i Womble odpowiadają w Swift 5 z niewielkimi ulepszeniami. Tutaj mamy rozszerzenie z 2 funkcjami skalowania obrazu do
maxLength
dowolnego wymiaru i kompresją jpeg.źródło
Ten był dla mnie idealny. Zachowuje proporcje i zajmuje
maxLength
. Szerokość lub wysokość nie będzie większa niżmaxLength
źródło
Oblicza najlepszą wysokość obrazu dla dostępnej szerokości.
źródło
Rozwiązałem to w dużo prostszy sposób
mnożnik skali określi skalowanie obrazu, im więcej, tym mnożnik będzie mniejszy obraz. więc możesz sprawdzić, co pasuje do Twojego ekranu.
Możesz też uzyskać mnożnik, dzieląc szerokość obrazu / szerokość ekranu.
źródło