Как установить границу UIImage
?Как я могу взять UIImage и дать ему черную границу?
ответ
Вы можете манипулировать самим изображением, но гораздо лучший способ - просто добавить UIView, который содержит UIImageView, и изменить фон на черный. Затем установите размер этого вида контейнера немного больше, чем UIImageView.
Будет ли работать с другим размером изображений, которые меняются «на лету»? UIImageView будет меняться все время и UIView? p.s. Манипулировать образ сам по себе будет здорово. – Shay
Вам нужно будет отрегулировать рамку содержащего вида вместе с изображением - вы можете сэкономить свойства центра для обоих видов, отрегулировать размер изображения, отрегулировать размер контейнера, а затем снова установить свойства центра для обоих. –
Это именно то, как я это делал, в отличие от поглаживания пути с помощью CG. просто казалось легче. –
Вы не можете добавить границу, но это будет работать с тем же эффектом. Вы также можете сделать UIView, названный blackBG в этом примере, в UIImageView с пограничным изображением и пустой серединой, а затем у вас будет пользовательская граница изображения, а не только черная.
UIView *blackBG = [[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)];
blackBG.backgroundColor = [UIColor blackColor];
UIImageView *myPicture = [[UIImageView alloc] initWithImage:
[UIImage imageNamed: @"myPicture.jpg"]];
int borderWidth = 10;
myPicture.frame = CGRectMake(borderWidth,
borderWidth,
blackBG.frame.size.width-borderWidth*2,
blackBG.frame.size.height-borderWidth*2)];
[blackBG addSubview: myPicture];
Это то, что я закончил делать; вставляя мой 'UIImageView' в центр чуть большего' UIView' моего цвета рамки. –
Вы можете сделать это путем создания нового образа (также ответил на ваш другой публикации этого вопроса):
- (UIImage*)imageWithBorderFromImage:(UIImage*)source;
{
CGSize size = [source size];
UIGraphicsBeginImageContext(size);
CGRect rect = CGRectMake(0, 0, size.width, size.height);
[source drawInRect:rect blendMode:kCGBlendModeNormal alpha:1.0];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor(context, 1.0, 0.5, 1.0, 1.0);
CGContextStrokeRect(context, rect);
UIImage *testImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return testImg;
}
Этот код будет производить розовую рамку вокруг изображения. Однако, если вы собираетесь просто отобразить границу, используйте слой UIImageView
и установите его границу.
С OS> 3,0 вы можете сделать это:
//you need this import
#import <QuartzCore/QuartzCore.h>
[imageView.layer setBorderColor: [[UIColor blackColor] CGColor]];
[imageView.layer setBorderWidth: 2.0];
Вы можете добавить границу в UIImageView, а затем изменить размер UIImageView в зависимости от размера изображения:
#import <QuartzCore/QuartzCore.h>
// adding border to the imageView
[imageView.layer setBorderColor: [[UIColor whiteColor] CGColor]];
[imageView.layer setBorderWidth: 2.0];
// resize the imageView to fit the image size
CGSize size = [image size];
float factor = size.width/self.frame.size.width;
if (factor < size.height/self.frame.size.height) {
factor = size.height/self.frame.size.height;
}
CGRect rect = CGRectMake(0, 0, size.width/factor, size.height/factor);
imageView.frame = rect;
Make убедитесь, что вы установили источник изображенияView в центр
#import <QuartzCore/CALayer.h>
UIImageView *imageView = [UIImageView alloc]init];
imageView.layer.masksToBounds = YES;
imageView.layer.borderColor = [UIColor blackColor].CGColor;
imageView.layer.borderWidth = 1;
Этот код может быть использован для добавления UIImageView
Открыть границы.
безупречный! Не нужно переживать хлопоты CGImage. (Мне не нужно было сохранять изображение с помощью рамки). Огромное спасибо! – Septronic
все эти ответы работают нормально, но добавьте прямое изображение. Предположим, у вас есть форма (в моем случае бабочка) и Вы хотите добавить границу (красная граница):
нам нужно два этапа: 1) принимают изображение, преобразовывают в CGImage, перейти к функции рисовать закадровый в контексте использования CoreGraphics и вернуть новый CGImage
2) преобразовать UIImage назад и рисовать:
// remember to release object!
+ (CGImageRef)createResizedCGImage:(CGImageRef)image toWidth:(int)width
andHeight:(int)height
{
// create context, keeping original image properties
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, width,
height,
8
4 * width,
colorspace,
kCGImageAlphaPremultipliedFirst
);
CGColorSpaceRelease(colorspace);
if(context == NULL)
return nil;
// draw image to context (resizing it)
CGContextSetInterpolationQuality(context, kCGInterpolationDefault);
CGSize offset = CGSizeMake(2,2);
CGFloat blur = 4;
CGColorRef color = [UIColor redColor].CGColor;
CGContextSetShadowWithColor (context, offset, blur, color);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), image);
// extract resulting image from context
CGImageRef imgRef = CGBitmapContextCreateImage(context);
CGContextRelease(context);
return imgRef;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
CGRect frame = CGRectMake(0,0,160, 122);
UIImage * img = [UIImage imageNamed:@"butterfly"]; // take low res OR high res, but frame should be the low-res one.
imgV = [[UIImageView alloc]initWithFrame:frame];
[imgV setImage: img];
imgV.center = self.view.center;
[self.view addSubview: imgV];
frame.size.width = frame.size.width * 1.3;
frame.size.height = frame.size.height* 1.3;
CGImageRef cgImage =[ViewController createResizedCGImage:[img CGImage] toWidth:frame.size.width andHeight: frame.size.height ];
imgV2 = [[UIImageView alloc]initWithFrame:frame];
[imgV2 setImage: [UIImage imageWithCGImage:cgImage] ];
// release:
if (cgImage) CGImageRelease(cgImage);
[self.view addSubview: imgV2];
}
Я добавил нормальную бабочку и большую бабочку с красной границей.
есть способ установить ширину красной границы здесь. – coder1010
Если вы знаете размеры своего изображения, то добавление границы слоя UIImageView является лучшим решением AFAIK. Infact, вы можете просто установить изображение вашего изображения в x, y, image.size.width, image.size.height
Если у вас есть ImageView фиксированного размера с динамически загружаемыми изображениями, которые изменяются (или масштабируются до AspectFit), тогда ваша цель - изменить размер изображения на новое измененное изображение.
Самый короткий способ сделать это:
// containerView is my UIImageView
containerView.layer.borderWidth = 7;
containerView.layer.borderColor = [UIColor colorWithRed:0.22 green:0.22 blue:0.22 alpha:1.0].CGColor;
// this is the key command
[containerView setFrame:AVMakeRectWithAspectRatioInsideRect(image.size, containerView.frame)];
Но использовать AVMakeRectWithAspectRatioInsideRect, вам нужно добавить этот
#import <AVFoundation/AVFoundation.h>
оператор импорта в файл, а также включать в себя рамки AVFoundation в проекте (поставляется в комплекте с SDK).
ЭТО - хороший, легкий и лучший ответ здесь! – rafinskipg
Спасибо @rafinskipg! Очень признателен. – ScorpionKing2k5
Эта функция вернет вам изображение с черной рамкой попробовать это .. надеюсь, что это поможет вам
- (UIImage *)addBorderToImage:(UIImage *)image frameImage:(UIImage *)blackBorderImage
{
CGSize size = CGSizeMake(image.size.width,image.size.height);
UIGraphicsBeginImageContext(size);
CGPoint thumbPoint = CGPointMake(0,0);
[image drawAtPoint:thumbPoint];
UIGraphicsBeginImageContext(size);
CGImageRef imgRef = blackBorderImage.CGImage;
CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, size.width,size.height), imgRef);
UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGPoint starredPoint = CGPointMake(0, 0);
[imageCopy drawAtPoint:starredPoint];
UIImage *imageC = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return imageC;
}
Если вы обнаружили какие-либо глифы, пожалуйста, дайте мне знать ... я улучшу его – SachinVsSachin
// Вы должны импортировать
QuartzCore/QuartzCore.h
& затем для ImageView в границах
[imageView.layer setBorderColor: [[UIColor blackColor] CGColor]];
[imageView.layer setBorderWidth: 2.0];
[imageView.layer setCornerRadius: 5.0];
Другой способ - сделать непосредственно от дизайнера.
Выберите свое изображение и перейдите в раздел «Показать инспектора удостоверений».
Здесь вы можете вручную добавить "User Defined выполнения Атрибуты":
layer.borderColor
layer.borderWidth
Это не сработает, поскольку вам нужен CGColor и через XIB он обеспечивает только UIColor – codesnooker
Цвет не будет работать, но если вам просто нужен черный - это наиболее «строки кода». Эффективный ответ = D – soprof
imageView_ProfileImage.layer.cornerRadius =10.0f;
imageView_ProfileImage.layer.borderColor = [[UIColor blackColor] CGColor];
imageView_ProfileImage.layer.borderWidth =.4f;
imageView_ProfileImage.layer.masksToBounds = YES;
Блестящий взломать, особенно когда речь заходит об использовании памяти - другие ответы потребуют 2x-памяти, чтобы на мгновение добавить эту границу. Pro tip - Если вы хотите просто добавить границу с одной стороны, вы также можете изменить границы. Отличный ответ! – judepereira
В Swift 3 вот как вы это делаете на самом UIImage :
let size = CGSize(width: image.size.width, height: image.size.height)
UIGraphicsBeginImageContext(size)
let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
image?.draw(in: rect, blendMode: .normal, alpha: 1.0)
let context = UIGraphicsGetCurrentContext()
context?.setStrokeColor(red: 0, green: 0, blue: 0, alpha: 1)
context?.stroke(rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.imageView.image = newImage
Для тех, кто ищет решение Plug-and-play на UIImage, я написал ответ CodyMace как расширение.
Использование: let outlined = UIImage(named: "something")?.outline()
extension UIImage {
func outline() -> UIImage? {
let size = CGSize(width: self.size.width, height: self.size.height)
UIGraphicsBeginImageContext(size)
let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
self.draw(in: rect, blendMode: .normal, alpha: 1.0)
let context = UIGraphicsGetCurrentContext()
context?.setStrokeColor(red: 0, green: 0, blue: 0, alpha: 1)
context?.stroke(rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
}
Я использую этот метод, чтобы добавить рамку вне изображения. Вы можете настроить ширину границы в boderWidth
константе.
Swift 3
func addBorderToImage(image : UIImage) -> UIImage {
let bgImage = image.cgImage
let initialWidth = (bgImage?.width)!
let initialHeight = (bgImage?.height)!
let borderWidth = Int(Double(initialWidth) * 0.10);
let width = initialWidth + borderWidth * 2
let height = initialHeight + borderWidth * 2
let data = malloc(width * height * 4)
let context = CGContext(data: data,
width: width,
height: height,
bitsPerComponent: 8,
bytesPerRow: width * 4,
space: (bgImage?.colorSpace)!,
bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue);
context?.draw(bgImage!, in: CGRect(x: CGFloat(borderWidth), y: CGFloat(borderWidth), width: CGFloat(initialWidth), height: CGFloat(initialHeight)))
context?.setStrokeColor(UIColor.white.cgColor)
context?.setLineWidth(CGFloat(borderWidth))
context?.move(to: CGPoint(x: 0, y: 0))
context?.addLine(to: CGPoint(x: 0, y: height))
context?.addLine(to: CGPoint(x: width, y: height))
context?.addLine(to: CGPoint(x: width, y: 0))
context?.addLine(to: CGPoint(x: 0, y: 0))
context?.strokePath()
let cgImage = context?.makeImage()
let uiImage = UIImage(cgImage: cgImage!)
free(data)
return uiImage;
}
- 1. Как я могу взять UIImage и программно сделать черную рамку?
- 2. Как дать черную границу TreeItem SWT?
- 3. HTML5 холст, как дать ему границу?
- 4. как я могу изменить метку ModelForm и дать ему имя
- 5. Пытаюсь установить границу UIImage
- 6. Как определить границу uiimage
- 7. Как я могу дать элементу WPF прямоугольную плоскую трехмерную границу?
- 8. Могу ли я дать обработчику XBL имя, чтобы позвонить ему?
- 9. Как игнорировать черную границу в MATLAB
- 10. Как сделать толстую черную границу на гиперссылке?
- 11. Почему я должен дать ему имя?
- 12. Вращение BufferedImage дает ему черную рамку
- 13. Как я могу получить липкую границу в HTML и CSS?
- 14. Добавить черную границу к кнопке динамически
- 15. Удалить черную границу из отсканированного изображения C#
- 16. как я могу снять флажок из html-формы в php и дать ему значение?
- 17. Как я могу изменить границу?
- 18. Как я могу опустить границу границы?
- 19. автозаполнения и как дать ему понять, строчных и заглавных
- 20. Itextsharp fit width и дать границу
- 21. Как дать ему проверить функцию div id?
- 22. Почему изображение Sitecore имеет черную границу сверху и снизу?
- 23. как я могу удалить верхнюю границу на UIToolbar
- 24. Как сгенерировать управление динамически и дать ему конкретные свойства калибра?
- 25. Как реализовать этот дизайн уведомления и дать ему разумный отзыв
- 26. Как дать границу кругу с помощью краски
- 27. Как дать Pool.map взять функцию лямбда
- 28. , как я могу получить местоположение пользователя и показать ему карту
- 29. Как отключить черную границу между моим списком в Android?
- 30. У оболочки CPAN заканчивается память. Как я могу дать ему больше памяти в Unix?
случайно, если кто-нибудь земли услышать с помощью поиска Google (как я) и ищут добавления границы в UIImageView, искать ответ на @mclin снизу. Прекрасно работает! –