it-swarm.com.de

Wie kann ich einen UIImage nehmen und ihm einen schwarzen Rand geben?

Wie kann ich den Rand einer UIImage setzen?

121
Shay

Mit OS> 3.0 können Sie Folgendes tun:

//you need this import
#import <QuartzCore/QuartzCore.h>

[imageView.layer setBorderColor: [[UIColor blackColor] CGColor]];
[imageView.layer setBorderWidth: 2.0];
238
mclin

Sie können dies tun, indem Sie ein neues Bild erstellen (auch in Ihrem anderen Beitrag dieser Frage beantwortet):

- (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;
}  

Dieser Code erzeugt einen rosa Rand um das Bild. Wenn Sie jedoch nur den Rand anzeigen möchten, verwenden Sie die Ebene von UIImageView und legen Sie den Rahmen fest.

67
Marcus S. Zarra
#import <QuartzCore/CALayer.h>


UIImageView *imageView = [UIImageView alloc]init];
imageView.layer.masksToBounds = YES;
imageView.layer.borderColor = [UIColor blackColor].CGColor;
imageView.layer.borderWidth = 1;    

Dieser Code kann zum Hinzufügen eines UIImageView-Ansichtsrahmens verwendet werden.

38
Faizan Refai
imageView_ProfileImage.layer.cornerRadius =10.0f;
imageView_ProfileImage.layer.borderColor = [[UIColor blackColor] CGColor];
imageView_ProfileImage.layer.borderWidth =.4f;
imageView_ProfileImage.layer.masksToBounds = YES;
11
Bijendra Singh

Wenn Sie die Abmessungen Ihres Bildes kennen, ist das Hinzufügen der Umrandung zur UIImageView-Ebene die beste Lösung, AFAIK. Tatsächlich können Sie FrameView einfach auf x, y, image.size.width, image.size.height setzen

Wenn Sie über eine ImageView mit fester Größe mit dynamisch geladenen Bildern verfügen, deren Größe geändert wird (oder auf AspectFit skaliert wird), besteht das Ziel darin, die Bildansicht auf das neue Bild zu skalieren.

Der kürzeste Weg, dies zu tun:

// 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)];

Damit Sie jedoch AVMakeRectWithAspectRatioInsideRect verwenden können, müssen Sie dies hinzufügen 

#import <AVFoundation/AVFoundation.h>

importieren Sie die Anweisung in Ihre Datei und fügen Sie das AVFoundation-Framework in Ihr Projekt ein (im Lieferumfang des SDK enthalten).

10
ScorpionKing2k5

Sie können keinen Rand hinzufügen, dies würde jedoch für den gleichen Effekt funktionieren. Sie können den UIView mit dem Namen blackBG in diesem Beispiel auch in eine UIImageView mit einem Rahmenbild und einer leeren Mitte umwandeln. Dann haben Sie einen benutzerdefinierten Bildrahmen anstelle von nur Schwarz.

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];
8
Andrew Johnson

alle diese Antworten funktionieren gut, ABER fügen Sie einem Bild ein Rect hinzu. Sie haben eine Form (in meinem Fall einen Schmetterling) und Sie möchten einen Rand (einen roten Rand) hinzufügen:

wir brauchen zwei Schritte: 1) Nehmen Sie das Bild, konvertieren Sie es in CGImage, wechseln Sie zu einer Funktion, um in einem Kontext mithilfe von CoreGraphics offscreen zu zeichnen, und geben Sie ein neues CGImage zurück

2) zurück in uiimage umwandeln und zeichnen:

// 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];

}

Ich habe einen normalen Schmetterling und einen rot umrandeten größeren Schmetterling hinzugefügt.

6
ingconti

Sie können der UIImageView einen Rahmen hinzufügen und dann die Größe der UIimageView entsprechend der Bildgröße ändern:

#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;

Stellen Sie sicher, dass Sie den Ursprung der Bildansicht auf die Mitte setzen

5
poleB

Sie können zwar das Bild selbst bearbeiten, aber Sie können einfach eine UIView hinzufügen, die die UIImageView enthält, und den Hintergrund in Schwarz ändern. Legen Sie dann die Größe dieser Containeransicht etwas größer als die UIImageView fest.

Eine andere Möglichkeit besteht darin, direkt vom Designer aus zu arbeiten.

Wählen Sie Ihr Bild aus und gehen Sie zu "Identitätsinspektor anzeigen".

Hier können Sie manuell " Benutzerdefinierte Laufzeitattribute" hinzufügen:

layer.borderColor
layer.borderWidth


enter image description here

2
Luca Davanzo

// Sie müssen importieren

QuartzCore/QuartzCore.h

& dann für ImageView in border

[imageView.layer setBorderColor: [[UIColor blackColor] CGColor]];

[imageView.layer setBorderWidth: 2.0];

[imageView.layer setCornerRadius: 5.0];
1
Panky

Mit dieser Funktion erhalten Sie ein Bild mit schwarzem Rand. Versuchen Sie dies. Hoffentlich hilft Ihnen das

- (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;
}
1
SachinVsSachin

In Swift 3 tun Sie es dem UIImage selbst:

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
0
CodyMace

Für diejenigen, die eine Plug-and-Play-Lösung für UIImage suchen, habe ich die Antwort von CodyMace als Erweiterung geschrieben.

Verwendung: 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

    }

}
0
Mavrick Laakso

Ich habe eine Klasse erstellt, die imageView h einen Rahmen hinzufügt. Verwenden Sie diese Klasse anstelle von UIImageView.Ich habe eine Auffüllung von 4 vergeben.

class UIBorderImageView: UIView {

private lazy var imageView: UIImageView = {
    let imageView = UIImageView()
    imageView.contentMode = .scaleAspectFit
    imageView.translatesAutoresizingMaskIntoConstraints = false
    return imageView
}()

override init(frame: CGRect) {
    super.init(frame: frame)
    self.backgroundColor = UIColor.White()
    self.layer.borderColor = UIColor.GreyMedium().cgColor
    self.layer.borderWidth = 1.0
    self.layer.cornerRadius = 4.0
    self.layer.masksToBounds = true
    self.setUpViews()
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

private func setUpViews(){
    self.addSubview(imageView)
    self.addConstraintsWithFormat(format: "H:|-4-[v0]-4-|", views: imageView)
    self.addConstraintsWithFormat(format: "V:|-4-[v0]-4-|", views: imageView)
}

func configureImageViewWith(image:UIImage){
    self.imageview.image = image 
}}
0
Pranav Gupta