UIImage
क्षैतिज रूप से कैसे फ्लिप करें , मुझे कक्षा के संदर्भ UIImageOrientationUpMirrored
में गणना मूल्य मिला UIImage
, कैसे इस संपत्ति का उपयोग फ्लिप करने के लिए किया जाए UIImage
।
UIImage
क्षैतिज रूप से कैसे फ्लिप करें , मुझे कक्षा के संदर्भ UIImageOrientationUpMirrored
में गणना मूल्य मिला UIImage
, कैसे इस संपत्ति का उपयोग फ्लिप करने के लिए किया जाए UIImage
।
जवाबों:
उद्देश्य सी
UIImage* sourceImage = [UIImage imageNamed:@"whatever.png"];
UIImage* flippedImage = [UIImage imageWithCGImage:sourceImage.CGImage
scale:sourceImage.scale
orientation:UIImageOrientationUpMirrored];
तीव्र
let flippedImage = myImage.withHorizontallyFlippedOrientation()
UIImageOrientationUp
काम करते समय UIImageOrientationUpMirrored
इसे फ्लिप नहीं किया। यह काम किया -image = [UIImage imageWithCGImage:image.CGImage scale:image.scale orientation:UIImageOrientationUp]
sourceImage.scale
पैमाने के लिए उपयोग करना बेहतर होगा ।
[flippedImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]
। कोई विचार क्यों?
इसे प्राप्त करने का एक बहुत ही सरल तरीका है कि आप UIImage के बजाय UIImageView बनाकर UIImageView पर रूपांतरण करें।
yourImageView.image =[UIImage imageNamed:@"whatever.png"];
yourImageView.transform = CGAffineTransform(scaleX: -1, y: 1); //Flipped
उम्मीद है की यह मदद करेगा।
UIImage
हेरफेर की तुलना में मेरे लिए बहुत बेहतर काम कर रहा था, जो मुझे मिला जब UIImageRenderingModeAlwaysTemplate
रेंडरिंग मोड के साथ साइड इफेक्ट हुआ ।
yourImageView.transform = CGAffineTransformIdentity
वर्टिकल फ्लिप को अक्सर ओपनजीएल बनावट का उपयोग करने के लिए आवश्यक होता है glTexImage2d(...)
। उपरोक्त प्रस्तावित चाल वास्तव में छवि डेटा को संशोधित नहीं करती है और इस मामले में काम नहीं करेगी। यहां https://stackoverflow.com/a/17909372 से प्रेरित वास्तविक डेटा फ्लिप करने के लिए एक कोड है
- (UIImage *)flipImage:(UIImage *)image
{
UIGraphicsBeginImageContext(image.size);
CGContextDrawImage(UIGraphicsGetCurrentContext(),CGRectMake(0.,0., image.size.width, image.size.height),image.CGImage);
UIImage *i = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return i;
}
मैंने ImageFlippedForRightToLeftLayoutDirection के साथ प्रयास किया है, और अलग-अलग झुकाव के साथ एक नया UIImage बना रहा हूं, लेकिन कम से कम यह एकमात्र समाधान है जो मैंने अपनी छवि को फ़्लिप करने के लिए पाया है
let ciimage: CIImage = CIImage(CGImage: imagenInicial.CGImage!)
let rotada3 = ciimage.imageByApplyingTransform(CGAffineTransformMakeScale(-1, 1))
जैसा कि आप मेरे खेल के मैदान में देख सकते हैं यह काम किया !! :)
और, ज़ाहिर है, फाइनलमेज = UIImage (CIImage: rotada3) दें
जैसा कि यह इमेज ओरिएंटेशन परिभाषित करता है:
typedef NS_ENUM(NSInteger, UIImageOrientation) {
UIImageOrientationUp, // default orientation
UIImageOrientationDown, // 180 deg rotation
UIImageOrientationLeft, // 90 deg CCW
UIImageOrientationRight, // 90 deg CW
UIImageOrientationUpMirrored, // as above but image mirrored along other axis. horizontal flip
UIImageOrientationDownMirrored, // horizontal flip
UIImageOrientationLeftMirrored, // vertical flip
UIImageOrientationRightMirrored, // vertical flip
};
मैंने अधिक परिस्थितियों के लिए कुछ सुधार किए जैसे कि AVCaptureSession से UIImage को संभालना।
UIImage* sourceImage = [UIImage imageNamed:@"whatever.png"];
UIImageOrientation flipingOrientation;
if(sourceImage.imageOrientation>=4){
flippedOrientation = sourceImage.imageOrientation - 4;
}else{
flippedOrientation = sourceImage.imageOrientation + 4;
}
UIImage* flippedImage = [UIImage imageWithCGImage:sourceImage.CGImage
scale: sourceImage.scale orientation: flipingOrientation];
यहाँ का तेज़ संस्करण है: (मैंने इस प्रश्न को टिप्पणियों में देखा)
let srcImage = UIImage(named: "imageName")
let flippedImage = UIImage(CGImage: srcImage.CGImage, scale: srcImage.scale, orientation: UIImageOrientation.UpMirrored)
iOS 10+
[myImage imageWithHorizontallyFlippedOrientation];
स्विफ्ट 4:
let flippedImage = myImage.withHorizontallyFlippedOrientation()
यह क्षैतिज रूप से एक UIImage को दर्पण / फ्लिप करने के लिए एक ठोस कार्यान्वयन है, और छवि को आगे और पीछे लागू कर सकता है। चूंकि यह अंतर्निहित छवि डेटा को बदलता है, ड्राइंग (जैसे, स्क्रीनशॉट) भी बदल जाएगा। काम करने के लिए परीक्षण किया गया, कोई गुणवत्ता हानि नहीं हुई।
func flipImage() -> UIImage? {
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
let bitmap = UIGraphicsGetCurrentContext()!
bitmap.translateBy(x: size.width / 2, y: size.height / 2)
bitmap.scaleBy(x: -1.0, y: -1.0)
bitmap.translateBy(x: -size.width / 2, y: -size.height / 2)
bitmap.draw(self.cgImage!, in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image?
}
हो सकता है कि यह कुछ के लिए उपयोग किया जाएगा:
UIImageOrientation imageOrientation;
switch (sourceImage.imageOrientation) {
case UIImageOrientationDown:
imageOrientation = UIImageOrientationDownMirrored;
break;
case UIImageOrientationDownMirrored:
imageOrientation = UIImageOrientationDown;
break;
case UIImageOrientationLeft:
imageOrientation = UIImageOrientationLeftMirrored;
break;
case UIImageOrientationLeftMirrored:
imageOrientation = UIImageOrientationLeft;
break;
case UIImageOrientationRight:
imageOrientation = UIImageOrientationRightMirrored;
break;
case UIImageOrientationRightMirrored:
imageOrientation = UIImageOrientationRight;
break;
case UIImageOrientationUp:
imageOrientation = UIImageOrientationUpMirrored;
break;
case UIImageOrientationUpMirrored:
imageOrientation = UIImageOrientationUp;
break;
default:
break;
}
resultImage = [UIImage imageWithCGImage:sourceImage.CGImage scale:sourceImage.scale orientation:imageOrientation];
एक साधारण विस्तार।
extension UIImage {
var flipped: UIImage {
guard let cgImage = cgImage else {
return self
}
return UIImage(cgImage: cgImage, scale: scale, orientation: .upMirrored)
}
}
उपयोग:
let image = #imageLiteral(resourceName: "imageName")
let imageView = UIImageView(image: image.flipped)
यह एक कार्यशील iOS8 / 9 संगत संस्करण है:
UIImage *image = [UIImage imageNamed:name];
if ([[UIApplication sharedApplication] userInterfaceLayoutDirection] == UIUserInterfaceLayoutDirectionRightToLeft) {
if ([image respondsToSelector:@selector(imageFlippedForRightToLeftLayoutDirection)]) {
//iOS9
image = image.imageFlippedForRightToLeftLayoutDirection;
}
else {
//iOS8
CIImage *coreImage = [CIImage imageWithCGImage:image.CGImage];
coreImage = [coreImage imageByApplyingTransform:CGAffineTransformMakeScale(-1, 1)];
image = [UIImage imageWithCIImage:coreImage scale:image.scale orientation:UIImageOrientationUp];
}
}
return image;
imageFlippedForRightToLeftLayoutDirection
उपयोग फ़्लिप किए गए लेआउट निर्देशों के साथ किया जाना है - उदाहरण के लिए अरबी देशों के लिए। इसलिए इसका उपयोग करना हमेशा वांछित के रूप में काम नहीं कर सकता है।
स्विफ्ट 3 और इसके बाद के संस्करण में परीक्षण किया गया
एक्सटेंशन के साथ इस समस्या को प्राप्त करने का सरल उपाय यहां दिया गया है। मैं इसका परीक्षण करता हूं और यह काम करता है। आप किसी भी दिशा में दर्पण कर सकते हैं।
extension UIImage {
func imageUpMirror() -> UIImage {
guard let cgImage = cgImage else { return self }
return UIImage(cgImage: cgImage, scale: scale, orientation: .upMirrored)
}
func imageDownMirror() -> UIImage {
guard let cgImage = cgImage else { return self }
return UIImage(cgImage: cgImage, scale: scale, orientation: .downMirrored)
}
func imageLeftMirror() -> UIImage {
guard let cgImage = cgImage else { return self }
return UIImage(cgImage: cgImage, scale: scale, orientation: .leftMirrored)
}
func imageRightMirror() -> UIImage {
guard let cgImage = cgImage else { return self }
return UIImage(cgImage: cgImage, scale: scale, orientation: .rightMirrored)
}
}
इस कोड के लिए उपयोग
let image = #imageLiteral(resourceName: "imageName")
flipHorizontally = image.imageUpMirror()
तो, आप अन्य कार्यों का उपयोग कर सकते हैं।
यहां ऊपर दिए गए उत्तरों में से एक है और स्विफ्ट 3 में मैं विशेष रूप से उपयोगी पाया गया जब आपके पास एक बटन है जिसे छवि को आगे और पीछे फ़्लिप करते रहने की आवश्यकता है।
func flipImage(sourceImage: UIImage,orientation: UIImageOrientation) -> UIImage {
var imageOrientation = orientation
switch sourceImage.imageOrientation {
case UIImageOrientation.down:
imageOrientation = UIImageOrientation.downMirrored;
break;
case UIImageOrientation.downMirrored:
imageOrientation = UIImageOrientation.down;
break;
case UIImageOrientation.left:
imageOrientation = UIImageOrientation.leftMirrored;
break;
case UIImageOrientation.leftMirrored:
imageOrientation = UIImageOrientation.left;
break;
case UIImageOrientation.right:
imageOrientation = UIImageOrientation.rightMirrored;
break;
case UIImageOrientation.rightMirrored:
imageOrientation = UIImageOrientation.right;
break;
case UIImageOrientation.up:
imageOrientation = UIImageOrientation.upMirrored;
break;
case UIImageOrientation.upMirrored:
imageOrientation = UIImageOrientation.up;
break;
}
return UIImage(cgImage: sourceImage.cgImage!, scale: sourceImage.scale, orientation: imageOrientation)
}
उपयोग:
imageToFlip: UIImage = flipImage(sourceImage: imageToFlip, orientation: imageToFlip.imageOrientation)
स्विफ्ट 4
yourImage.transform = CGAffineTransform(scaleX: -1, y: 1)
अलिखित करने के कारण निम्नलिखित हैं:
let srcImage = UIImage(named: "myimage")!
let flippedImage = UIImage(cgImage: srcImage.cgImage!,
scale: srcImage.scale, orientation: UIImage.Orientation.upMirrored)
आप इस का उपयोग करते हुए छवि को घुमा सकते हैं
स्विफ्ट 4
extension UIImage {
public func imageRotatedByDegrees(degrees: CGFloat, flip: Bool) -> UIImage {
let radiansToDegrees: (CGFloat) -> CGFloat = {
return $0 * (180.0 / CGFloat(M_PI))
}
let degreesToRadians: (CGFloat) -> CGFloat = {
return $0 / 180.0 * CGFloat(M_PI)
}
// calculate the size of the rotated view's containing box for our drawing space
let rotatedViewBox = UIView(frame: CGRect(origin: CGPoint.zero, size: size))
let t = CGAffineTransform(rotationAngle: degreesToRadians(degrees));
rotatedViewBox.transform = t
let rotatedSize = rotatedViewBox.frame.size
// Create the bitmap context
UIGraphicsBeginImageContext(rotatedSize)
let bitmap = UIGraphicsGetCurrentContext()!
bitmap.translateBy(x: rotatedSize.width / 2.0, y: rotatedSize.height / 2.0)
// Move the origin to the middle of the image so we will rotate and scale around the center.
//CGContextTranslateCTM(bitmap, rotatedSize.width / 2.0, rotatedSize.height / 2.0);
// // Rotate the image context
bitmap.rotate(by: degreesToRadians(degrees))
// CGContextRotateCTM(bitmap, degreesToRadians(degrees));
// Now, draw the rotated/scaled image into the context
var yFlip: CGFloat
if(flip){
yFlip = CGFloat(-1.0)
} else {
yFlip = CGFloat(1.0)
}
bitmap.scaleBy(x: yFlip, y: -1.0)
//CGContextScaleCTM(bitmap, yFlip, -1.0)
bitmap.draw(self.cgImage!, in: CGRect.init(x: -size.width / 2, y: -size.height / 2, width: size.width, height: size.height))
// CGContextDrawImage(bitmap, CGRectMake(-size.width / 2, -size.height / 2, size.width, size.height), CGImage)
let newImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return newImage
}
}
स्विफ्ट 5 - Xcode 11.5
क्षैतिज रूप से घूमने का सबसे अच्छा समाधान: इस वीडियो को देखें:
https://m.youtube.com/watch?v=4kSLbuB-MlU
या इस कोड का उपयोग करें:
import UIKit
class FirstViewControl: UIViewController {
@IBOutlet weak var buttonAnim: UIButton!
@IBAction func ClickOnButtonAnim(_ sender: UIButton) {
UIView.transition(with: buttonAnim, duration: 0.4, options: .transitionFlipFromLeft, animation: nil , completion: nil)
}
}
आप इस एनीमेशन में किसी भी ui (बटन या लेबल या uiview या छवि) का उपयोग कर सकते हैं।