UIImage扩展用代码直接改变图片大小

以下内容属于转载

在iOS中,uiimage没有用于修改大小的属性,要在代码中改变uiimage图片的大小,需要扩展UIImage类,如下:

头文件:

#import<UIKit/UIKit.h>

@interface UIImage (UIImageExtras)

- (UIImage *)imageByScalingToSize:(CGSize)targetSize;

@end

.m文件

#import"UIImage+UIImageExtras.h"

@implementation UIImage (UIImageExtras)

- (UIImage *)imageByScalingToSize:(CGSize)targetSize

{

UIImage *sourceImage = self;

UIImage *newImage = nil;

CGSize imageSize = sourceImage.size;

CGFloat width = imageSize.width;

CGFloat height = imageSize.height;

CGFloat targetWidth = targetSize.width;

CGFloat targetHeight = targetSize.height;

CGFloat scaleFactor = 0.0;

CGFloat scaledWidth = targetWidth;

CGFloat scaledHeight = targetHeight;

CGPoint thumbnailPoint = CGPointMake(0.0,0.0);

if (CGSizeEqualToSize(imageSize, targetSize) ==NO) {

CGFloat widthFactor = targetWidth / width;

CGFloat heightFactor = targetHeight / height;

if (widthFactor < heightFactor)

scaleFactor = widthFactor;

else

scaleFactor = heightFactor;

scaledWidth  = width * scaleFactor;

scaledHeight = height * scaleFactor;

// center the image

if (widthFactor < heightFactor) {

thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;

}
else if (widthFactor > heightFactor) {

thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;

}

}

// this is actually the interesting part:

UIGraphicsBeginImageContext(targetSize);

CGRect thumbnailRect = CGRectZero;

thumbnailRect.origin = thumbnailPoint;

thumbnailRect.size.width  = scaledWidth;

thumbnailRect.size.height = scaledHeight;

[sourceImage
drawInRect:thumbnailRect];

newImage =UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

if(newImage == nil)

NSLog(@"could not scale image");

return newImage ;

}

@end

写好扩展类之后,就在要修改UIImage大小的viewcontroller.h头文件空先导入你的写好的扩展类,我的是#import “UIImage+UIImageExtras.h”

这样,你就可以调用你对UIImage写的那个扩展方法了。

我调用的地方

UIImage *tabbarimage=[UIImageimageNamed:@"xxx.png"];

CGSize imagesize=CGSizeMake(50.0, 50.0);

self.tabBarItem.image=[tabbarimageimageByScalingToSize:imagesize];

下面是网上另外一个扩展UIImage类的版本,头文件我就不发了,直接上.m文件

@implementationUIImage
(Category)

-
(UIImage*)transformWidth:(CGFloat)width

                    height:(CGFloat)height
{

    

    CGFloat
destW = width;

    CGFloat
destH = height;

    CGFloat
sourceW = width;

    CGFloat
sourceH = height;

        

    CGImageRef
imageRef =
self.CGImage;

    CGContextRef
bitmap = CGBitmapContextCreate(
NULL,

                                                destW,

                                                destH,

                                                CGImageGetBitsPerComponent(imageRef),

                                                4*destW,

                                                CGImageGetColorSpace(imageRef),

                                                (kCGBitmapByteOrder32Little
| kCGImageAlphaPremultipliedFirst));

    

    CGContextDrawImage(bitmap,
CGRectMake(0, 0, sourceW, sourceH), imageRef);

    

    CGImageRef
ref = CGBitmapContextCreateImage(bitmap);

    UIImage
*result = [UIImage imageWithCGImage:ref];

    CGContextRelease(bitmap);

    CGImageRelease(ref);

    

    returnresult;

}

@end

时间: 2024-10-25 06:09:41

UIImage扩展用代码直接改变图片大小的相关文章

ios 改变图片大小缩放方法

http://www.cnblogs.com/zhangdadi/archive/2012/11/17/2774919.html http://bbs.csdn.net/topics/390898581 ios 改变图片大小缩放方法 -(UIImage*) OriginImage:(UIImage *)image scaleToSize:(CGSize)size{    UIGraphicsBeginImageContext(size);  //size 为CGSize类型,即你所需要的图片尺寸

imagecopyresampled()改变图片大小后质量要比imagecopyresized()高。

php程序中改变图片大小的函数大多数人都想到用imagecopyresized(),不过经过测试比较发现,使用imagecopyresampled()改变的图片质量更高. 下面我们来看看两者的比较结果. 原图: 使用imagecopyresized()将图片缩小一半 代码: <?php// File and new size$filename = 'test.jpg';$percent = 0.5;// Content typeheader('Content-Type: image/jpeg')

android &nbsp; 动态改变图片大小

在oncreate中,使用getheight等函数不能获得控件大小,得到的为0 应使用其他方法 Resources res = getResources(); final ImageView view=(ImageView)findViewById(R.id.IV_about); final Drawable drawable=res.getDrawable(R.drawable.ic_about); DisplayMetrics dm = new DisplayMetrics(); getWi

双击改变图片大小和多点触摸改变图片大小

系统的 UIScrollView 就有多点触摸改变图片的大小的功能,如果在向添加别的触摸事件,如这次讲到的双击图片大小就可以自定义一个 scrollView,当然,这个 scrollView 是继承自系统的 UIScrollView  的,这样,它仍然具有系统 scrollView 的特性,另外,可以添加自己想要的特性. 新的 scrollView 只需要添加一个方法,就可以实现双击图片变大的功能 #import "ZYScrollView.h" @implementation ZYS

matlab 批量改变图片大小 imresize 任意改变

ObjDir = 'F:\STUDY\CamVid\trainannot\';%将被改变的图像地址,称为目标地址 OtpDir = 'F:\CamVid\trainannot\';%输出图像地址,称为输出地址 for i = 1:1:1340%我的图像标号是00000001到00001340 bgFile = [ObjDir,num2str(i,'%08d'),'.png'];%这句话读取目标地址里面的格式为png的图片 %num2str是先把数字i转换成string然后补零直到八位 %举个例子

Android程序如何在代码中改变图片原有的颜色

最近一边找工作一边完善之前的项目.之前安卓初中级的项目是模仿酷狗音乐播放器的.下载一个apk文件,改后缀,解压,然后根据官方应用的布局,用得到的图片照着做出来.记得酷狗首页有好几种主要图标,解压后得到的白色加透明组合成的,但官方应用是换主题颜色会跟着改变,这回正好有空就网上找来方法跟着改. 因为只是把白色改成别的颜色,所以不难. package com.example.ex_tupian; import android.app.Activity; import android.graphics.

鼠标滚轮改变图片大小

<!DOCTYPE html"> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>通过鼠标滚动-放大缩小图片</title> <meta name="description&

Andorid WebView内容自适应并改变图片大小

关键部分: <meta name="viewport" content="width=device-width, initial-scale=1"> webview.loadUrl("javascript:var imgs=document.getElementsByTagName('img');for(var i=0;i<imgs.length;i++){imgs[i].style.width='320px';};void(0);&qu

最简单的方法来压缩图片,改变图片大小

1. 2. 3.按照百分比或像素 调整即可 原文地址:https://www.cnblogs.com/onelikeone/p/8487957.html