He estado golpeándome la cara con este literalmente durante días, y aunque siento constantemente que estoy al borde de la revelación, simplemente no puedo lograr mi objetivo.
Pensé, con anticipación en las fases conceptuales de mi diseño, que sería un asunto trivial tomar una imagen de la cámara o biblioteca del iPhone, reducirla a una altura específica, usando una función equivalente a la opción de Relleno de aspecto de UIImageView (en su totalidad en el código) y, a continuación, recortar fuera algo que no encajaba dentro de un CGRect pasado.
Obtener la imagen original de la cámara o biblioteca fue trivial. Me sorprende lo difícil que han resultado ser los otros dos pasos.
La imagen adjunta muestra lo que estoy tratando de lograr. ¿Alguien podría ser tan amable de sostener mi mano? Todos los ejemplos de código que he encontrado hasta ahora parecen romper la imagen, estar al revés, parecer basura, salir de los límites o, de lo contrario, simplemente no funcionan correctamente.
fuente
Respuestas:
Necesitaba lo mismo: en mi caso, elegir la dimensión que se ajuste una vez escalada y luego recortar cada extremo para ajustar el resto al ancho. (Estoy trabajando en horizontal, por lo que es posible que no haya notado ninguna deficiencia en el modo vertical). Aquí está mi código: es parte de una categoría en UIImage. El tamaño de destino en mi código siempre se establece en el tamaño de pantalla completa del dispositivo.
fuente
Una publicación anterior contiene código para un método para cambiar el tamaño de tu UIImage. La porción relevante es la siguiente:
En cuanto al recorte, creo que si altera el método para usar un tamaño diferente para la escala que para el contexto, la imagen resultante debe recortarse a los límites del contexto.
fuente
originalImage
. Gracias.UIGraphicsBeginImageContextWithOptions(newSize, 1.0f, 0.0f);
. (explicado aquí: stackoverflow.com/questions/4334233/… )Propongo este. ¿No es ella una belleza? ;)
fuente
Hay una gran pieza de código relacionada con el cambio de tamaño de las imágenes + varias otras operaciones. Llegué a este cuando trataba de descubrir cómo cambiar el tamaño de las imágenes ... http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/
fuente
Aqui tienes. Este es perfecto ;-)
EDITAR: vea el comentario a continuación - "No funciona con ciertas imágenes, falla con: CGContextSetInterpolationQuality: error de contexto inválido 0x0"
fuente
Esta es una versión de la respuesta de Jane Sales en Swift. ¡Salud!
fuente
Modifiqué el código de Brad Larson. Aspecto llenará la imagen en un rectángulo dado.
fuente
La versión de Xamarin.iOS para la respuesta aceptada sobre cómo cambiar el tamaño y luego recortar UIImage (Aspecto de relleno) está debajo
fuente
Convertí guía de Sam Wirch a rápida y funcionó bien para mí, aunque hay algunos muy leve "aplastar" en la imagen final que no podía resolver.
Si alguien quiere la versión objetiva c, está en su sitio web.
fuente
Descubrí que el Swift 3 publicado por Evgenii Kanvets no escala la imagen de manera uniforme.
Aquí está mi versión Swift 4 de la función que no aplasta la imagen:
fuente
UIGraphicsBeginImageContextWithOptions
pero otros funcionaron perfectamente. ¡Gracias!El siguiente código simple funcionó para mí.
fuente
UIImageView
objetos. Sin embargo, esta pregunta se trata de escalar elUIImage
objeto en sí.entonces puedes tomar capturas de pantalla de tu imagen con esto
fuente
Debajo del ejemplo de trabajo: Imagen izquierda - (imagen de origen); Imagen derecha con escala x2
Si desea escalar la imagen pero conservar su marco (proporciones), llame al método de esta manera:
fuente
Esta pregunta parece haberse puesto a descansar, pero en mi búsqueda de una solución que pudiera entender más fácilmente (y escrita en Swift), llegué a esto (también publicado en: ¿Cómo recortar el UIImage? )
Quería poder recortar desde una región en función de una relación de aspecto y escalar a un tamaño basado en un límite externo. Aquí está mi variación:
Hay un par de cosas que encontré confusas, las preocupaciones separadas de recortar y cambiar el tamaño. El recorte se maneja con el origen del rect que pasa a drawInRect, y la escala se maneja por la porción de tamaño. En mi caso, necesitaba relacionar el tamaño del rectificador de recorte en la fuente, con mi rect de salida de la misma relación de aspecto. El factor de escala es entonces salida / entrada, y esto debe aplicarse a drawRect (pasado a drawInRect).
Una advertencia es que este enfoque asume efectivamente que la imagen que está dibujando es más grande que el contexto de la imagen. No he probado esto, pero creo que puede usar este código para manejar el recorte / zoom, pero definiendo explícitamente el parámetro de escala como el parámetro de escala mencionado anteriormente. Por defecto, UIKit aplica un multiplicador basado en la resolución de la pantalla.
Finalmente, debe tenerse en cuenta que este enfoque UIKit tiene un nivel más alto que los enfoques CoreGraphics / Quartz y Core Image, y parece manejar los problemas de orientación de la imagen. También vale la pena mencionar que es bastante rápido, después de ImageIO, de acuerdo con esta publicación aquí: http://nshipster.com/image-resizing/
fuente
Versión rápida:
fuente
Aquí hay una versión de Swift 3 de la guía de Sam Wirch para Swift publicada por William T.
fuente