2017-12-20 111 views
1

UIImageViewにボーダーを追加するのは、レイヤー(borderWidth、borderColorなど)を使用するとかなり簡単です。イメージビューではなく、イメージに境界線を追加する可能性はありますか?誰かが知っていますか?swiでuiimageに色付きの枠を追加する方法

更新:

私はウント以下の提案に従ってみましたがextensionを使用しました。ありがとうございますが、私は望みの結果を得られませんでした。ここに私のコードです。なにが問題ですか?

import UIKit 
    class ViewController: UIViewController { 

    var imageView: UIImageView! 
    var sizeW = CGFloat() 
    var sizeH = CGFloat() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     sizeW = view.frame.width 
     sizeH = view.frame.height 

     setImage() 
    } 

    func setImage(){ 

     //add image view 
     imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: sizeW/2, height: sizeH/2)) 
     imageView.center = view.center 
     imageView.tintColor = UIColor.orange 
     imageView.contentMode = UIViewContentMode.scaleAspectFit 

     let imgOriginal = UIImage(named: "plum")!.withRenderingMode(.alwaysTemplate) 
     let borderImage = imgOriginal.imageWithBorder(width: 2, color: UIColor.blue) 
     imageView.image = borderImage 

     view.addSubview(imageView) 

    } 



} 


    extension UIImage { 
    func imageWithBorder(width: CGFloat, color: UIColor) -> UIImage? { 
     let square = CGSize(width: min(size.width, size.height) + width * 2, height: min(size.width, size.height) + width * 2) 
     let imageView = UIImageView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: square)) 
     imageView.contentMode = .center 
     imageView.image = self 
     imageView.layer.borderWidth = width 
     imageView.layer.borderColor = color.cgColor 
     UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, false, scale) 
     guard let context = UIGraphicsGetCurrentContext() else { return nil } 
     imageView.layer.render(in: context) 
     let result = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return result 
    } 
} 

赤い境界を有する第二の画像は、私が必要なものより以下である:イメージに

enter image description here

enter image description here

+0

ここには正確に何が必要ですか? –

+0

私は、画像の周りにではなく、梅の周りにborderWidth 3の赤い枠線を必要とします。どうすれば入手できますか? – Roman

+0

多かれ少なかれ望ましい結果を持つ2番目の画像を追加しました。 – Roman

答えて

0

罫線は、iOSの画像処理領域に属します。それは、UIViewのためのボーダーとして簡単ではありませんそれはかなり深いですが、あなたは距離を行くために喜んでいる場合は、ここでは、ライブラリや旅のヒント https://github.com/BradLarson/GPUImage

はGPUImageThresholdEdgeDetectionFilter

を使用してみたりOpenCVのhttps://docs.opencv.org/2.4/doc/tutorials/ios/image_manipulation/image_manipulation.htmlを試しています

があなたのコードにextensionの下に追加します:

extension UIImage { 
    func imageWithBorder(width: CGFloat, color: UIColor) -> UIImage? { 
     let square = CGSize(width: min(size.width, size.height) + width * 2, height: min(size.width, size.height) + width * 2) 
     let imageView = UIImageView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: square)) 
     imageView.contentMode = .center 
     imageView.image = self 
     imageView.layer.borderWidth = width 
     imageView.layer.borderColor = color.cgColor 
     UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, false, scale) 
     guard let context = UIGraphicsGetCurrentContext() else { return nil } 
     imageView.layer.render(in: context) 
     let result = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return result 
    } 
} 
ここ
0

は、あなたがそれを達成することができますどのような方法であります

そして、あなたはこのようにそれを使用することができます。

let imgOriginal = UIImage.init(named: "Richie_Rich") 
img.image = imgOriginal?.imageWithBorder(width: 2, color: UIColor.blue) 

そして結果は次のようになります。

enter image description here

Hereは、ラウンドコーナーであるオリジナルのポストですが、あなたがしたので、私はそのコードを削除それを求めないでください。

+0

私はあなたのコードを使用して、画像ビューに境界線を取得しようとしました!しかし、私はイメージそのものに境界が必要です。 imgOriginal = UIImage.init(名前は "plum") imageView.image = imgOriginal?.imageWithBorder(幅:2、色:UIColor.blue) – Roman

+0

あなたはすでに上記のコードを持っています。 'img.image'はあなたが探しているものです。 @Roman –

+0

あなたは簡単に変数に格納することができます: 'let borderImage = imgOriginal?imageWithBorder(width:2、color:UIColor.blue)' @Roman –

0

使用UIImage

extension UIImage { 

    func outline() -> UIImage? { 

     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: 1.0, green: 0.5, blue: 1.0, alpha: 1.0) 
     context?.setLineWidth(5.0) 
     context?.stroke(rect) 
     let newImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 

     return newImage 

    } 

} 

ため、この単純な拡張は、それはあなたのピンクのボーダーで画像が得られます。

+0

私はあなたのコードを使ってみました:let image = UIImage(名前: "plum")!. outline()そしてまだ画像の周りにはなく、 – Roman

+0

画像の周りには画像が表示されません。あなたのイメージビューをより大きくし、コンテンツモードのプロパティをアスペクトに合わせたままにして、背景色を付けます。 imageViewの周囲ではなく、画像の周りに境界線を表示します。 –

+0

こんにちはアルン、私はあなたの提案に従おうとしていますが、結果は正しいボーダーではありません。おそらくextentionだけでなく、funcのための短いコードを与えることができますか? – Roman

関連する問題