En la aplicación de mi iPhone, tomo una foto con la cámara, luego quiero cambiar su tamaño a 290 * 390 píxeles. Estaba usando este método para cambiar el tamaño de la imagen:
UIImage *newImage = [image _imageScaledToSize:CGSizeMake(290, 390)
interpolationQuality:1];
Funciona perfectamente, pero es una función indocumentada, por lo que ya no puedo usarla con iPhone OS4.
Entonces ... ¿cuál es la forma más sencilla de cambiar el tamaño de un UIImage?
Respuestas:
La forma más simple es establecer el marco de su
UIImageView
y establecercontentMode
una de las opciones de cambio de tamaño.O puede usar este método de utilidad, si realmente necesita cambiar el tamaño de una imagen:
Ejemplo de uso:
fuente
newImage
ya se lanzará automáticamente, y debería depender del método que lo llamó para retenerlo o no. Este enfoque solo está pidiendo un error de memoria yainit
que no es parte del nombre del método. Esperaría que un método llamado así devuelva un objeto lanzado automáticamente.UIGraphicsBeginImageContextWithOptions
Aquí hay una versión rápida de la respuesta de Paul Lynch
Y como extensión:
fuente
Solución Proper Swift 3.0 para iOS 10+ : uso
ImageRenderer
y sintaxis de cierre:Y aquí está la versión de Objective-C:
fuente
Trevor Howard tiene algunas categorías UIImage que manejan el cambio de tamaño bastante bien. Si nada más puede usar el código como ejemplos.
Nota: A partir de iOS 5.1, esta respuesta puede ser inválida. Ver comentario a continuación.
fuente
Una versión más compacta para Swift 4 y iOS 10+:
Uso:
fuente
También he visto esto también (que uso en el
UIButtons
estado Normal y Seleccionado ya que los botones noresize
encajan). El crédito va para quien sea el autor original.Primero haga un archivo .h y .m vacío llamado
UIImageResizing.h
yUIImageResizing.m
Incluya ese archivo .h en cualquier archivo .m en el que vaya a utilizar la función y luego llámelo de esta manera:
fuente
Esta mejora en el código de Paul le dará una imagen nítida de alta resolución en un iPhone con pantalla retina. De lo contrario, cuando se reduce, es borroso.
fuente
UIGraphicsBeginImageContextWithOptions
utilizará automáticamente la escala de la pantalla principal (a partir de iOS 3.2).Aquí hay una manera simple:
resizedImage es una nueva imagen.
fuente
Solución rápida para Stretch Fill, Aspect Fill y Aspect Fit
y para usar puedes hacer lo siguiente:
Gracias a abdullahselek por su solución original.
fuente
Aquí hay una modificación de la categoría escrita por iWasRobbed arriba. Mantiene la relación de aspecto de la imagen original en lugar de distorsionarla.
fuente
Si solo desea una imagen más pequeña y no le importa el tamaño exacto:
Si configura la escala
0.25f
, obtendrá una imagen de 816 por 612 de una cámara de 8MP.Aquí hay una categoría UIImage + Scale para aquellos que la necesitan.
fuente
¿Por qué tan complicado? Creo que usar la API del sistema puede lograr el mismo resultado:
El único problema es que debe pasar el inverso del índice objetivo como segundo argumento, ya que según el documento, el segundo parámetro especifica el índice de la imagen original en comparación con el nuevo escalado.
fuente
Esta es una extensión UIImage compatible con Swift 3 y Swift 4 que escala la imagen al tamaño dado con una relación de aspecto
Ejemplo de uso
fuente
scaledImage(with size:)
oscaledWithSize(_:)
. TampocoUIGraphicsGetImageFromCurrentImageContext
puede volver realmentenil
, por!
lo tanto , funcionaría también. También puede simplificar la creación de rect aCGRect(origin: .zero, size: size)
.Encontré una categoría para UIImage en los propios ejemplos de Apple que hace el mismo truco. Aquí está el enlace: https://developer.apple.com/library/ios/samplecode/sc2273/Listings/AirDropSample_UIImage_Resize_m.html .
Solo tendrás que cambiar la llamada:
en
imageWithImage:scaledToSize:inRect:
con:Para considerar el canal alfa en la imagen.
fuente
fuente
Para mis compañeros Xamarianos, aquí hay una versión Xamarin.iOS C # de la respuesta de @Paul Lynch.
fuente
Si desea hacer una miniatura de un UIImage (con cambio de tamaño proporcional o tal vez algún recorte involucrado), consulte la categoría UIImage + Resize que le permite usar una sintaxis concisa, similar a ImageMagick:
fuente
[cf Chris] Para cambiar el tamaño al tamaño deseado:
o, equivalentemente, sustituto
CGImageGetWidth(...)/DESIREDWIDTH
fuente
Rogerio Chaves responde como una extensión rápida
Y también bonificación
fuente
Swift 3.0 con opción a prueba de fallos (devuelve la imagen original en caso de error):
fuente
(Compatible con Swift 4) Solución iOS 10+ e iOS <10 (utilizando,
UIGraphicsImageRenderer
si es posible, de loUIGraphicsGetImageFromCurrentImageContext
contrario)fuente
Enfoque efectivo sin estirar la imagen Swift 4
// Método de llamada
fuente
La respuesta de @Paul Lynch es excelente, pero cambiaría la relación de la imagen. si no desea cambiar la proporción de la imagen y aún desea que la nueva imagen se ajuste al nuevo tamaño, intente esto.
fuente
usa esta extensión
fuente
Swift 2.0:
fuente
Aquí mi código Swift algo detallado
fuente
guard
) a laaspectRatioAwareSize
función de modo que no arroje una excepción de división por cero si los parámetros de entrada para imageSize o boxSize sonCGSize.zero
Respuesta rápida 4:
fuente
The scale factor to apply to the bitmap. If you specify a value of 0.0, the scale factor is set to the scale factor of the device’s main screen.
Descubrí que es difícil encontrar una respuesta que pueda usar de forma inmediata en su proyecto Swift 3 . El principal problema de otras respuestas es que no respetan el canal alfa de la imagen. Aquí está la técnica que estoy usando en mis proyectos.
Ejemplo de uso:
Este código es una reescritura de la extensión de Apple con soporte adicional para imágenes con y sin canal alfa.
Como lectura adicional, recomiendo consultar este artículo para conocer diferentes técnicas de cambio de tamaño de imagen. El enfoque actual ofrece un rendimiento decente, opera API de alto nivel y es fácil de entender. Recomiendo mantenerlo a menos que encuentre que el cambio de tamaño de la imagen es un cuello de botella en su rendimiento.
fuente
Use esta extensión, en caso de que necesite cambiar el tamaño del ancho / alto solo con la relación de aspecto.
fuente