Tenho uma imagem grande em Assets.xcassets. Como redimensionar esta imagem com SwiftUI para torná-la pequena?
Tentei definir o quadro, mas não funcionou:
Image(room.thumbnailImage)
.frame(width: 32.0, height: 32.0)
Respostas:
Você deve usar .resizable()
antes de aplicar qualquer modificação de tamanho em um Image
.
Image(room.thumbnailImage)
.resizable()
.frame(width: 32.0, height: 32.0)
aspectRatio(_:contentMode:)
Image("name").resizable().scaledToFit()
não está grampeado, no entanto. Assim, você pode embrulhar sua imagem em uma visualização, ajustar o quadro da visualização para qualquer tamanho que você precisar e, em seguida scaledToFit()
, tornar a imagem o maior possível, mantendo a proporção de aspecto.
Que tal agora:
struct ResizedImage: View {
var body: some View {
Image("myImage")
.resizable()
.scaledToFit()
.frame(width: 200.0,height:200)
}
}
a visualização da imagem é de 200x200, mas a imagem mantém a proporção original (redimensionando dentro desse quadro)
Image(uiImage: image!).resizable().aspectRatio(image!.size, contentMode: .fill)
onde image
é do tipo UIImage
porque o Image
tipo não expõe nenhuma propriedade de tamanho.
Expandindo a resposta e comentários de @rraphael:
A partir do Xcode 11 beta 2, você pode dimensionar uma imagem em dimensões arbitrárias, enquanto mantém a proporção original, envolvendo a imagem em outro elemento.
por exemplo
struct FittedImage: View
{
let imageName: String
let width: CGFloat
let height: CGFloat
var body: some View {
VStack {
Image(systemName: imageName)
.resizable()
.aspectRatio(1, contentMode: .fit)
}
.frame(width: width, height: height)
}
}
struct FittedImagesView: View
{
private let _name = "checkmark"
var body: some View {
VStack {
FittedImage(imageName: _name, width: 50, height: 50)
.background(Color.yellow)
FittedImage(imageName: _name, width: 100, height: 50)
.background(Color.yellow)
FittedImage(imageName: _name, width: 50, height: 100)
.background(Color.yellow)
FittedImage(imageName: _name, width: 100, height: 100)
.background(Color.yellow)
}
}
}
Resultados
(Por algum motivo, a imagem está um pouco desfocada. Tenha certeza de que a saída real é nítida.)
.aspectRatio(1, ...
. Para não dizer que qualquer outra solução aqui funcionou para mim até agora ...
No SwiftUI, use o .resizable()
método para redimensionar uma imagem. Usando .aspectRatio()
e especificando umContentMode
, você pode "Ajustar" ou "Preencher" a imagem, conforme apropriado.
Por exemplo, aqui está o código que redimensiona a imagem ajustando:
Image("example-image")
.resizable()
.aspectRatio(contentMode: .fit)
Bem, parece muito fácil em SwiftUI / Seguindo a demonstração que eles deram: https://developer.apple.com/videos/play/wwdc2019/204
struct RoomDetail: View {
let room: Room
var body: some View {
Image(room.imageName)
.resizable()
.aspectRatio(contentMode: .fit)
}
Espero que ajude.
Nota: Meu nome de imagem é
img_Logo
e você pode alterar o nome da imagem e definir as propriedades da imagem:
VStack(alignment: .leading, spacing: 1) {
//Image Logo Start
Image("img_Logo")
.resizable()
.padding(.all, 10.0)
.frame(width: UIScreen.main.bounds.width * 0.4, height: UIScreen.main.bounds.height * 0.2)
//Image Logo Done
}
Outra abordagem é usar o scaleEffect
modificador:
Image(room.thumbnailImage)
.resizable()
.scaleEffect(0.5)
Se quiser usar a proporção com redimensionamento, você pode usar o seguinte código:
Image(landmark.imageName).resizable()
.frame(width: 56.0, height: 56.0)
.aspectRatio(CGSize(width:50, height: 50), contentMode: .fit)
Uma vez que não devemos codificar / corrigir o tamanho da imagem. Esta é a melhor maneira de fornecer intervalo para ajustar de acordo com a resolução da tela em diferentes dispositivos.
Image("ImageName Here")
.resizable()
.frame(minWidth: 60.0, idealWidth: 75.0, maxWidth: 95.0, minHeight: 80.0, idealHeight: 95.0, maxHeight: 110.0, alignment: .center)
.scaledToFit()
.clipShape(Capsule())
.shadow(color: Color.black.opacity(5.0), radius: 5, x: 5, y: 5)
Por padrão, as visualizações de imagens se dimensionam automaticamente de acordo com seu conteúdo, o que pode fazer com que elas ultrapassem a tela. Se você adicionar o modificador resizable (), a imagem será dimensionada automaticamente para preencher todo o espaço disponível:
Image("example-image")
.resizable()
No entanto, isso também pode fazer com que a imagem tenha sua proporção original distorcida, porque ela será esticada em todas as dimensões pelo valor necessário para fazê-la preencher o espaço.
Se quiser manter sua proporção, você deve adicionar um modificador aspectRatio usando .fill ou .fit, como este:
Image("example-image")
.resizable()
.aspectRatio(contentMode: .fit)
Se você quiser redimensionar a imagem em swiftUI, basta usar o seguinte código:
import SwiftUI
struct ImageViewer : View{
var body : some View {
Image("Ssss")
.resizable()
.frame(width:50,height:50)
}
}
Mas aqui está o problema com isso. Se você adicionar esta imagem dentro de um botão, a imagem não será mostrada, apenas um bloco de cor azul estaria lá. Para resolver esse problema, basta fazer o seguinte:
import SwiftUI
struct ImageViewer : View{
var body : some View {
Button(action:{}){
Image("Ssss")
.renderingMode(.original)
.resizable()
.frame(width:50,height:50)
}
}
}
Você pode definir as propriedades da imagem como segue: -
Image("\(Image Name)")
.resizable() // Let you resize the images
.frame(width: 20, height: 20) // define frame size as required
.background(RoundedRectangle(cornerRadius: 12) // Set round corners
.foregroundColor(Color("darkGreen")) // define foreground colour
É muito importante entender a estrutura lógica do código. Como no SwiftUI, uma imagem não é redimensionável por padrão. Portanto, para redimensionar qualquer imagem, você deve torná-la redimensionável aplicando o modificador .resizable () imediatamente após declarar uma visualização de imagem.
Image("An Image file name")
.resizable()