मैं एक की सीमा कैसे निर्धारित कर सकता हूं UIImage
?
मैं एक की सीमा कैसे निर्धारित कर सकता हूं UIImage
?
जवाबों:
OS> 3.0 के साथ आप यह कर सकते हैं:
//you need this import
#import <QuartzCore/QuartzCore.h>
[imageView.layer setBorderColor: [[UIColor blackColor] CGColor]];
[imageView.layer setBorderWidth: 2.0];
UIImage
कोरग्राफिक्स के साथ ग्राफिक्स के संदर्भ में उदाहरण प्रस्तुत किए जा सकते हैं।
आप एक नई छवि बनाकर ऐसा कर सकते हैं (इस प्रश्न के आपके अन्य पोस्टिंग में भी उत्तर दिया गया है):
- (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
और इसकी बॉर्डर सेट करें।
CGContextSetLineWidth
size
320x480 या नहीं, आप एक रेटिना डिवाइस पर हैं, की परवाह किए बिना है, इसलिए जब आप छवि बचाने के लिए, यह है कि 320x480px संकल्प, नहीं 640x960 में बचत होती है।
#import <QuartzCore/CALayer.h>
UIImageView *imageView = [UIImageView alloc]init];
imageView.layer.masksToBounds = YES;
imageView.layer.borderColor = [UIColor blackColor].CGColor;
imageView.layer.borderWidth = 1;
इस कोड का उपयोग UIImageView
दृश्य सीमा जोड़ने के लिए किया जा सकता है ।
imageView_ProfileImage.layer.cornerRadius =10.0f;
imageView_ProfileImage.layer.borderColor = [[UIColor blackColor] CGColor];
imageView_ProfileImage.layer.borderWidth =.4f;
imageView_ProfileImage.layer.masksToBounds = YES;
यदि आप अपनी छवि के आयामों को जानते हैं, तो UIImageView की परत में एक सीमा जोड़ना सबसे अच्छा समाधान AFAIK है। वास्तव में, आप बस अपनी छवि को x, y, image.size. उपलब्धता, 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 ढांचे को शामिल करें (एसडीके के साथ बंडल में आता है)।
आप एक सीमा नहीं जोड़ सकते, लेकिन यह उसी प्रभाव के लिए काम करेगा। आप इस उदाहरण में एक UIImageView में एक सीमा छवि और एक रिक्त मध्य के साथ UIView को ब्लैकबीजी भी बना सकते हैं, और फिर आपके पास सिर्फ काले रंग के बजाय एक कस्टम छवि सीमा होगी।
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
के केंद्र में मेरा घोंसला बनाना ।
ये सभी उत्तर ठीक काम करते हैं लेकिन एक छवि में एक आयत जोड़ते हैं। मान लीजिए कि आपके पास एक आकार है (मेरे मामले में एक तितली) और आप एक सीमा (एक लाल सीमा) जोड़ना चाहते हैं:
हमें दो चरणों की आवश्यकता है: 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];
}
मैंने एक सामान्य तितली और एक लाल-बॉर्डर वाली बड़ी तितली को जोड़ा।
आप 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;
सुनिश्चित करें कि आप imageView की उत्पत्ति को केंद्र में सेट करना चाहते हैं
आप स्वयं छवि को हेरफेर कर सकते हैं, लेकिन एक बेहतर तरीका यह है कि आप केवल एक UIView को जोड़ दें जिसमें UIImageView शामिल है, और पृष्ठभूमि को काले रंग में बदलें। फिर उस कंटेनर दृश्य का आकार UIImageView की तुलना में थोड़ा बड़ा सेट करें।
एक और तरीका डिजाइनर से सीधे करना है।
अपनी छवि का चयन करें और "आइडेंटिटी इंस्पेक्टर दिखाएं" के तहत जाएं।
यहाँ आप मैन्युअल रूप से " उपयोगकर्ता परिभाषित रनटाइम विशेषताएँ" जोड़ सकते हैं :
layer.borderColor
layer.borderWidth
यह फ़ंक्शन काली सीमा के साथ आपकी छवि वापस लौटाएगा। यह आशा है कि यह आपकी मदद करेगा
- (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;
}
स्विफ्ट 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
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
}
}
मैंने एक वर्ग बनाया है जो imageView h पर बॉर्डर जोड़ता है। UIImageView के बजाय इस वर्ग का उपयोग करें। मैंने 4 का पैडिंग दिया है। आप अपनी इच्छानुसार दे सकते हैं।
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
}}
मैं इस पद्धति का उपयोग छवि के बाहर सीमा जोड़ने के लिए करता हूं । आप बॉर्डर की चौड़ाई को कस्टमाइज़ कर सकते हैंboderWidth
निरंतर ।
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;
}