रखकर UIImage का आकार बदलें मैंने पहलू अनुपात को रखकर छवि का आकार बदलने के लिए कई पदों में देखा। ये फ़ंक्शन आकार बदलने के दौरान आरईसीटी के लिए निश्चित बिंदु (चौड़ाई और ऊंचाई) का उपयोग करता है। लेकिन मेरी परियोजना में, मुझे अकेले चौड़ाई के आधार पर दृश्य का आकार बदलने की जरूरत है, ऊंचाई अनुपात के आधार पर ऊंचाई स्वचालित रूप से लेनी चाहिए। कोई भी इसे प्राप्त करने में मेरी सहायता करता है।पहलू अनुपात और चौड़ाई
उत्तर
Srikar की विधि बहुत अच्छी तरह से काम करता है, अगर आप दोनों ऊंचाई अपने नए आकार की और चौड़ाई पता है। यदि आप उदाहरण के लिए केवल उस चौड़ाई को जानते हैं जिसे आप स्केल करना चाहते हैं और ऊंचाई की परवाह नहीं करते हैं तो आपको ऊंचाई के स्केल कारक की गणना करना होगा।
+(UIImage*)imageWithImage: (UIImage*) sourceImage scaledToWidth: (float) i_width
{
float oldWidth = sourceImage.size.width;
float scaleFactor = i_width/oldWidth;
float newHeight = sourceImage.size.height * scaleFactor;
float newWidth = oldWidth * scaleFactor;
UIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight));
[sourceImage drawInRect:CGRectMake(0, 0, newWidth, newHeight)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
सबसे आसान तरीका है अपने UIImageView
के फ्रेम को सेट करना और contentMode
को आकार बदलने वाले विकल्पों में से एक पर सेट करना।
कोड इस प्रकार है - यह एक उपयोगिता पद्धति के रूप में इस्तेमाल किया जा सकता -
+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize
{
UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
से अधिक नहीं होगी, मैं इसे 'सामग्री मोड' सेट करने के साथ काम करने में कामयाब रहा। –
आप जानना चाहते हैं कि छवि पोर्ट्रेट या लैंडस्केप हो जाएगा ऐसा नहीं करते हैं तो (उदाहरण, उपयोगकर्ता कैमरे के साथ तस्वीर लेता है), मैं एक और तरीका है कि अधिकतम चौड़ाई और ऊंचाई पैरामीटर लेता बनाया।
मान लें कि आपके पास UIImage *myLargeImage
है जो 4: 3 अनुपात है।
UIImage *myResizedImage = [ImageUtilities imageWithImage:myLargeImage
scaledToMaxWidth:1024
maxHeight:1024];
आकार बदलने पर UIImage 1024x768 होगा; चित्र अगर 768x1024। यह विधि रेटिना डिस्प्ले के लिए उच्च रेज छवियां भी उत्पन्न करेगी।
+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)size {
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
UIGraphicsBeginImageContextWithOptions(size, NO, [[UIScreen mainScreen] scale]);
} else {
UIGraphicsBeginImageContext(size);
}
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
+ (UIImage *)imageWithImage:(UIImage *)image scaledToMaxWidth:(CGFloat)width maxHeight:(CGFloat)height {
CGFloat oldWidth = image.size.width;
CGFloat oldHeight = image.size.height;
CGFloat scaleFactor = (oldWidth > oldHeight) ? width/oldWidth : height/oldHeight;
CGFloat newHeight = oldHeight * scaleFactor;
CGFloat newWidth = oldWidth * scaleFactor;
CGSize newSize = CGSizeMake(newWidth, newHeight);
return [ImageUtilities imageWithImage:image scaledToSize:newSize];
}
धन्यवाद। यह ठीक वही है जिसकी तलाश मुझे थी! – SeanK
आपको बहुत धन्यवाद! – 4GetFullOf
यह सबसे अच्छी बात है लेकिन यह हमेशा मेरे परिभाषित आकार – Mashhadi
बस AVFoundation के आयात और AVMakeRectWithAspectRatioInsideRect(CGRectCurrentSize, CGRectMake(0, 0, YOUR_WIDTH, CGFLOAT_MAX)
का उपयोग रयान के जवाब पर सुधार करने के लिए:
+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)size {
CGFloat oldWidth = image.size.width;
CGFloat oldHeight = image.size.height;
//You may need to take some retina adjustments into consideration here
CGFloat scaleFactor = (oldWidth > oldHeight) ? width/oldWidth : height/oldHeight;
return [UIImage imageWithCGImage:image.CGImage scale:scaleFactor orientation:UIImageOrientationUp];
}
धन्यवाद @ Maverick1st एल्गोरिथ्म, मैं इसे Swift
करने के लिए लागू, में मेरे मामले ऊंचाई है इनपुट पैरामीटर
class func resizeImage(image: UIImage, newHeight: CGFloat) -> UIImage {
let scale = newHeight/image.size.height
let newWidth = image.size.width * scale
UIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight))
image.drawInRect(CGRectMake(0, 0, newWidth, newHeight))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
यह विधि UIImage पर एक श्रेणी है। AVFoundation का उपयोग कर कोड की कुछ पंक्तियों में फिट करने के लिए स्केल है। #import <AVFoundation/AVFoundation.h>
आयात करना न भूलें।
@implementation UIImage (Helper)
- (UIImage *)imageScaledToFitToSize:(CGSize)size
{
CGRect scaledRect = AVMakeRectWithAspectRatioInsideRect(self.size, CGRectMake(0, 0, size.width, size.height));
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
[self drawInRect:scaledRect];
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
@end
यह मेरे लिए सबसे छोटी स्मृति पदचिह्न के साथ सर्वोत्तम परिणाम देने के लिए मिला। +1 –
शानदार शानदार, बहुत बहुत धन्यवाद। –
तेज कोड में रयान के समाधान @Ryan
उपयोग:
func imageWithSize(image: UIImage,size: CGSize)->UIImage{
if UIScreen.mainScreen().respondsToSelector("scale"){
UIGraphicsBeginImageContextWithOptions(size,false,UIScreen.mainScreen().scale);
}
else
{
UIGraphicsBeginImageContext(size);
}
image.drawInRect(CGRectMake(0, 0, size.width, size.height));
var newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
//Summon this function VVV
func resizeImageWithAspect(image: UIImage,scaledToMaxWidth width:CGFloat,maxHeight height :CGFloat)->UIImage
{
let oldWidth = image.size.width;
let oldHeight = image.size.height;
let scaleFactor = (oldWidth > oldHeight) ? width/oldWidth : height/oldHeight;
let newHeight = oldHeight * scaleFactor;
let newWidth = oldWidth * scaleFactor;
let newSize = CGSizeMake(newWidth, newHeight);
return imageWithSize(image, size: newSize);
}
ठीक है, हम यहाँ छवि का आकार बदलने के लिए कुछ अच्छा जवाब है, लेकिन मैं सिर्फ अपनी जरूरत के अनुसार संशोधित। उम्मीद है कि यह मेरे जैसे किसी की मदद करेगा।
मेरे आवश्यकता
- था तो छवि चौड़ाई 1920 से भी अधिक है, 1920 की चौड़ाई और मूल पहलू अनुपात के साथ बनाए रखने के ऊंचाई के साथ उसका आकार बदलने के।
- यदि छवि ऊंचाई 1080 से अधिक है, तो इसे 1080 ऊंचाई के साथ आकार दें और मूल पहलू अनुपात के साथ चौड़ाई बनाए रखें। करने के लिए @
if (originalImage.size.width > 1920)
{
CGSize newSize;
newSize.width = 1920;
newSize.height = (1920 * originalImage.size.height)/originalImage.size.width;
originalImage = [ProfileEditExperienceViewController imageWithImage:originalImage scaledToSize:newSize];
}
if (originalImage.size.height > 1080)
{
CGSize newSize;
newSize.width = (1080 * originalImage.size.width)/originalImage.size.height;
newSize.height = 1080;
originalImage = [ProfileEditExperienceViewController imageWithImage:originalImage scaledToSize:newSize];
}
+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize
{
UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
धन्यवाद Srikar Appal, आकार बदलने के लिए मैं अपनी विधि का इस्तेमाल किया है।
आप this के साथ-साथ आकार बदलने के लिए भी जांच सकते हैं।
मैं एक बहुत सरल तरीका पैमाने के
UIImage *placeholder = [UIImage imageNamed:@"OriginalImage.png"];
self.yourImageview.image = [UIImage imageWithCGImage:[placeholder CGImage] scale:(placeholder.scale * 1.5)
orientation:(placeholder.imageOrientation)];
गुणक छवि के scalling परिभाषित करेगा, और अधिक गुणक छोटी छवि में इसे हल कर दिया है। तो आप जांच सकते हैं कि आपकी स्क्रीन क्या फिट बैठती है।
या आप छविविड्थ/स्क्रीनविड्थ को विभाजित करके गुणक भी प्राप्त कर सकते हैं।
सर्वश्रेष्ठ उत्तर मेवरिक 1 के सही ढंग से स्विफ्ट (नवीनतम तेज 3 के साथ काम करने) के लिए अनुवाद:
func imageWithImage (sourceImage:UIImage, scaledToWidth: CGFloat) -> UIImage {
let oldWidth = sourceImage.size.width
let scaleFactor = scaledToWidth/oldWidth
let newHeight = sourceImage.size.height * scaleFactor
let newWidth = oldWidth * scaleFactor
UIGraphicsBeginImageContext(CGSize(width:newWidth, height:newHeight))
sourceImage.draw(in: CGRect(x:0, y:0, width:newWidth, height:newHeight))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}
स्विफ्ट 3 कुछ बदलाव हैं। यहाँ UIImage करने के लिए एक विस्तार है:
public extension UIImage {
public func resize(height: CGFloat) -> UIImage? {
let scale = height/self.size.height
let width = self.size.width * scale
UIGraphicsBeginImageContext(CGSize(width: width, height: height))
self.draw(in: CGRect(x:0, y:0, width:width, height:height))
let resultImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return resultImage
}
}
यह एक मेरे लिए एकदम सही था। पहलू अनुपात रखता है और maxLength
लेता है। चौड़ाई या ऊंचाई maxLength
-(UIImage*)imageWithImage: (UIImage*) sourceImage maxLength: (float) maxLength
{
CGFloat scaleFactor = maxLength/MAX(sourceImage.size.width, sourceImage.size.height);
float newHeight = sourceImage.size.height * scaleFactor;
float newWidth = sourceImage.size.width * scaleFactor;
UIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight));
[sourceImage drawInRect:CGRectMake(0, 0, newWidth, newHeight)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
- 1. पहलू अनुपात और चौड़ाई
- 2. पहलू अनुपात
- 3. पहलू अनुपात
- 4. पहलू अनुपात
- 5. पहलू अनुपात
- 6. मूल पहलू अनुपात
- 7. एक निश्चित पहलू अनुपात
- 8. क्यूटी: अपने पहलू अनुपात
- 9. यूट्यूब वीडियो पहलू अनुपात
- 10. webrtc - वेबकैम के पहलू अनुपात
- 11. क्विवर प्लॉट तीर पहलू अनुपात
- 12. बिटमैप ड्रायबल में पहलू अनुपात कैसे रखें
- 13. अधिकतम उपलब्ध चौड़ाई के लिए एक छवि स्केलिंग, पहलू अनुपात रखने और imageView अतिरिक्त स्थान
- 14. उत्तल झुकाव के पहलू अनुपात का आकलन
- 15. एंड्रॉइड: मीडियाप्लेयर वीडियो पहलू अनुपात मुद्दा
- 16. कोकोस 2 डी और नया आईफोन 5 पहलू अनुपात
- 17. पोर्ट्रेट अभिविन्यास छवियों पर छवि की चौड़ाई सीमित करें/पहलू अनुपात को संरक्षित करें
- 18. Imshow: सीमा और पहलू
- 19. चौड़ाई को भरने के लिए वीडियो दृश्य को ज़ूम करना, पहलू अनुपात
- 20. पहलू और वसंत पहलू-ऑटोप्रोक्सी
- 21. निर्धारित करने के लिए कैसे जो पहलू अनुपात करीब हैं
- 22. एक मेहेड सतह के त्रिकोण के पहलू अनुपात
- 23. पहलू अनुपात रखते हुए फॉर्म का आकार बदलें
- 24. एंड्रॉइड कैमरा पूर्वावलोकन: 1: 1 पहलू अनुपात, कैसे?
- 25. पृष्ठभूमि छवि स्केलिंग पहलू अनुपात को बनाए रखने के दौरान
- 26. libGDX में विभिन्न पहलू अनुपात से निपटने के लिए कैसे?
- 27. छवि मैगिक परिवर्तन पहलू अनुपात छवि को स्केल किए बिना
- 28. मैं matplotlib में पहलू अनुपात कैसे सेट कर सकता हूं?
- 29. जावा में ग्रिडलाउट के पहलू अनुपात को कैसे लॉक करें?
- 30. ggplot geom_errorbar चौड़ाई जब पहलू (और स्केल = "मुक्त")
आपको वास्तव में 'newWidth' चर की आवश्यकता नहीं है, हालांकि यह पहले से ही 'i_width' है। –
आपको ऊंचाई से भी विभाजित करने की आवश्यकता है और जो भी 0 के करीब है, स्केलिंग कारकों की तुलना करें। उपर्युक्त कोड केवल उन छवियों के साथ काम करेगा जो उच्च हैं – IceForge
यदि मैं चाहता हूं कि मुझे ऊंचाई से विभाजित करने की आवश्यकता होगी मेरी ऊंचाई अनुपात को भी जानें और चौड़ाई या ऊंचाई को स्केल करके फिट करें। लेकिन चूंकि टीओ ने अनुपात और चौड़ाई को रखने के लिए स्पष्ट रूप से पूछा, और चौड़ाई या ऊंचाई नहीं, मेरा जवाब पूरी तरह से सही है। – Maverick1st