天道酬勤,学无止境

如何使用 Codeigniter 调整图像大小(How to resize image using Codeigniter)

问题

我正在尝试上传图像并调整图像大小。我想要图像原始图像和拇指图像。

但问题是图像大小调整代码不起作用。

图像上传代码工作正常,将图像存储在文件夹中,但图像大小调整代码不起作用。

我怎样才能做到这一点 ?

这是我的代码

public function add_images(){

    $this->form_validation->set_rules('description','Description','required');
    $this->form_validation->set_rules('status','Status','required');

    if($this->form_validation->run() == TRUE) {
         // print_r($this->input->post());
        $config['upload_path'] = 'public/img/inner_images/';
        $config['allowed_types'] = 'gif|jpg|jpeg|png';   // upload only valid images            
        // update library setting of upload
        $this->load->library('upload', $config);
        //upload image 
        $this->upload->do_upload('image');
        $fInfo = $this->upload->data(); // get all info of uploaded file

        //for image resize
        $img_array = array();
        $img_array['image_library'] = 'gd2';
        $img_array['maintain_ratio'] = TRUE;
        $img_array['create_thumb'] = TRUE;
        //you need this setting to tell the image lib which image to process
        $img_array['source_image'] = $fInfo['full_path'];
        $img_array['width'] = 113;
        $img_array['height'] = 75;

        $this->load->library('image_lib', $img_array);

        if (!$this->image_lib->resize())
        {
            echo $this->image_lib->display_errors(); exit;
        }

        if($fInfo['file_ext'] ==='.gif'||$fInfo['file_ext'] ==='.jpg'|| $fInfo['file_ext'] ==='.jpeg' || $fInfo['file_ext'] ==='.png'|| $fInfo['file_ext'] ===''){
            $insert = array(
                'inner_image' =>$fInfo['file_name'],
                'description' => $this->input->post('description'),
                'status' => $this->input->post('status')
            );
            $check = $this->mdl_inner->add_image($insert);
            if($check){
                $this->session->set_flashdata('success',"Image Added Sucessfully");
                redirect('admin/inner_gallery/add_images/', 'refresh');  
            }
        }else{
            $this->session->set_flashdata('error',"Upload Proper Image Format");
            redirect('admin/inner_gallery/add_images/', 'refresh');
        }
    }
    $arrData['middle'] = 'admin/inner/add_image';
    $this->load->view('admin/template',$arrData);
}
回答1

谢谢你们,但我解决了这个问题。 通过在构造函数中加载库

 $this->load->library('image_lib');

之后添加了两行代码

 $this->image_lib->clear();
 $this->image_lib->initialize($img_array);

并删除此行

 $this->load->library('image_lib', $img_array);

我的最终代码是

public function add_images(){

    $this->form_validation->set_rules('description','Description','required');
    $this->form_validation->set_rules('status','Status','required');

    if($this->form_validation->run() == TRUE) {
         // print_r($this->input->post());
        $config['upload_path'] = 'public/img/inner_images/';
        $config['allowed_types'] = 'gif|jpg|jpeg|png';   // upload only valid images            
        // update library setting of upload
        $this->load->library('upload', $config);
        //upload image 
        $this->upload->do_upload('image');
        $fInfo = $this->upload->data(); // get all info of uploaded file

        //for image resize
        $img_array = array();
        $img_array['image_library'] = 'gd2';
        $img_array['maintain_ratio'] = TRUE;
        $img_array['create_thumb'] = TRUE;
        //you need this setting to tell the image lib which image to process
        $img_array['source_image'] = $fInfo['full_path'];
        $img_array['width'] = 113;
        $img_array['height'] = 75;

        $this->image_lib->clear(); // added this line
        $this->image_lib->initialize($img_array); // added this line
        if (!$this->image_lib->resize())
        {
            echo $this->image_lib->display_errors(); exit;
        }
        if($fInfo['file_ext'] ==='.gif'||$fInfo['file_ext'] ==='.jpg'|| $fInfo['file_ext'] ==='.jpeg' || $fInfo['file_ext'] ==='.png'|| $fInfo['file_ext'] ===''){
            $insert = array(
                'inner_image' =>$fInfo['file_name'],
                'description' => $this->input->post('description'),
                'status' => $this->input->post('status')
            );
            $check = $this->mdl_inner->add_image($insert);
            if($check){
                $this->session->set_flashdata('success',"Image Added Sucessfully");
                redirect('admin/inner_gallery/add_images/', 'refresh');  
            }
        }else{
            $this->session->set_flashdata('error',"Upload Proper Image Format");
            redirect('admin/inner_gallery/add_images/', 'refresh');
        }
    }
    $arrData['middle'] = 'admin/inner/add_image';
    $this->load->view('admin/template',$arrData);
}

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Codeigniter调整图像大小并创建缩略图(codeigniter resize image and create thumbnail)
    问题 您好,根据ci文档,您可以使用image_lib调整图像大小,并且有一些选项建议我们可以从该图像创建其他缩略图 create_thumb FALSE TRUE/FALSE (boolean) Tells the image processing function to create a thumb. R thumb_marker _thumb None Specifies the thumbnail indicator. It will be inserted just before the file extension, so mypic.jpg would become mypic_thumb.jpg R 所以这是我的代码 $config_manip = array( 'image_library' => 'gd2', 'source_image' => "./uploads/avatar/tmp/{$this->input->post('new_val')}", 'new_image' => "./uploads/avatar/{$this->input->post('new_val')}", 'maintain_ratio'=> TRUE , 'create_thumb' => TRUE , 'thumb_marker' => '_thumb' , 'width' =
  • Codeigniter图像调整大小?(Codeigniter image resize?)
    问题 我对CI中的图像类有疑问吗? 这是一个例子 在控制器上: $this->load->library( array('image_lib') ); 在视图上我有这个: foreach($results as $row) { $config['image_library'] = 'gd2'; $config['source_image'] = '/img/proizvodi/'.$row->proizvodid.'.jpg'; $config['create_thumb'] = TRUE; $config['maintain_ratio'] = TRUE; $config['width'] = 75; $config['height'] = 50; $this->load->library('image_lib', $config); $this->image_lib->resize(); } 但是我没有错误,并且没有创建缩略图? 我不知道哪里出错了? 回答1 您不应该在foreach中加载image_lib。 尝试使用下面的代码 $this->load->library('image_lib'); foreach($results as $row) { $config['image_library'] = 'gd2'; $config['source_image'] = '
  • 如何使用PIL调整图像大小并保持其长宽比?(How do I resize an image using PIL and maintain its aspect ratio?)
    问题 有没有一种明显的方法来实现我所缺少的? 我只是想制作缩略图。 回答1 定义最大大小。 然后,通过采用min(maxwidth/width, maxheight/height)来计算调整大小比率。 适当的大小是oldsize*ratio 。 当然,还有一个库方法可以执行此操作:方法Image.thumbnail 。 以下是PIL文档中的一个(经过编辑的)示例。 import os, sys import Image size = 128, 128 for infile in sys.argv[1:]: outfile = os.path.splitext(infile)[0] + ".thumbnail" if infile != outfile: try: im = Image.open(infile) im.thumbnail(size, Image.ANTIALIAS) im.save(outfile, "JPEG") except IOError: print "cannot create thumbnail for '%s'" % infile 回答2 此脚本将使用PIL(Python影像库)将图像(somepic.jpg)调整为300像素的宽度,并且高度与新的宽度成比例。 它通过确定原始宽度(img.size [0])的300个像素的百分比,然后将原始高度(img
  • 如何在终端中以递归方式在Ubuntu中批量调整图像大小?(How to batch resize images in Ubuntu recursively within the terminal?)
    问题 我在一组有组织的文件夹中存储了多个图像。 我需要从其父目录递归地将这些图像调整为特定百分比。 我正在运行Ubuntu 11.10,我更喜欢直接从终端学习如何做。 回答1 您可以使用imagemagick。 例如,要将当前目录下的所有JPG图像调整为原始尺寸的50%,可以执行以下操作: for f in `find . -name "*.jpg"` do convert $f -resize 50% $f.resized.jpg done 生成的文件将在名称中两次出现“ .jpg”。 如果这是一个问题,则可以检查以下替代方法。 为了遍历/查找要调整大小的文件,您也可以使用xargs。 例子: find . -name "*.jpg" | xargs convert -resize 50% 这将创建图像的副本。 如果只想将它们转换为原位,则可以使用: find . -name "*.jpg" | xargs mogrify -resize 50% 回答2 扩展@betabandido的答案 如果图像在文件名或文件夹名称中有空格,则应将-print0与find配合使用-0与xargs配合使用,以避免任何解析错误。 find . -name "*.jpg" -print0 | xargs -0 convert -resize 50% find . -name "*.jpg"
  • 如何使用OpenCV2.0和Python2.6调整图像大小(How to resize an image with OpenCV2.0 and Python2.6)
    问题 我想使用OpenCV2.0和Python2.6来显示调整大小的图像。 我使用并采用了此示例,但是不幸的是,该代码是针对OpenCV2.1的,似乎不适用于2.0。 这是我的代码: import os, glob import cv ulpath = "exampleshq/" for infile in glob.glob( os.path.join(ulpath, "*.jpg") ): im = cv.LoadImage(infile) thumbnail = cv.CreateMat(im.rows/10, im.cols/10, cv.CV_8UC3) cv.Resize(im, thumbnail) cv.NamedWindow(infile) cv.ShowImage(infile, thumbnail) cv.WaitKey(0) cv.DestroyWindow(name) 由于我不能使用 cv.LoadImageM 我用了 cv.LoadImage 相反,这在其他应用程序中没有问题。 但是,cv.iplimage没有属性行,列或大小。 谁能给我一个提示,如何解决这个问题? 回答1 如果要使用CV2,则需要使用resize功能。 例如,这会将两个轴的大小调整为一半: small = cv2.resize(image, (0,0), fx=0.5, fy=0.5)
  • 如何使用GD调整大小并将上传的图像转换为PNG?(How do I resize and convert an uploaded image to a PNG using GD?)
    问题 我想允许用户以各种格式(至少GIF,JPEG和PNG )上载化身类型的图像,但是将它们全部保存为PNG数据库BLOB 。 如果图像按像素大小过大,我想在插入数据库之前调整它们的大小。 使用GD进行大小调整和PNG转换的最佳方法是什么? 编辑:可悲的是,我需要使用的服务器上只有GD可用,没有ImageMagick。 回答1 <?php /* Resizes an image and converts it to PNG returning the PNG data as a string */ function imageToPng($srcFile, $maxSize = 100) { list($width_orig, $height_orig, $type) = getimagesize($srcFile); // Get the aspect ratio $ratio_orig = $width_orig / $height_orig; $width = $maxSize; $height = $maxSize; // resize to height (orig is portrait) if ($ratio_orig < 1) { $width = $height * $ratio_orig; } // resize to width (orig is
  • 如何在Wordpress中调整大小/访问原始图像?(How do I resize/access original images in wordpress?)
    问题 图像在wordpress中的哪里调整大小? 在数据库中? 在文件夹中? 我将如何调整原始图像的大小(而不创建新版本)。 我之所以这么问,是因为我在Wordpress网站上上传了很多图片,这些图片太大且加载速度变慢,并且我想调整它们的大小,以便没有任何大于1500px的尺寸。 我已经看过一些插件,包括“重新生成缩略图”,但是可能有一个确实可以实现我尚未找到的插件。 回答1 好了,图像“即时”调整大小,然后存储在服务器中,其信息记录在数据库中。 原始遗迹和所有“缩略图”均已生成。 在这种情况下,“缩略图”是指所有WP生成的图像大小,无论大小。 我在WordPress StackExchange上回答了相同的问题。 解决方案来自本文:如何自动使用调整大小的图像代替原始图像。 此脚本将用WordPress生成的大图像替换上载的图像(如果大于设置中定义的较大尺寸),以节省服务器空间,如果将缩略图链接到原始图像(如灯箱),则可以节省带宽。使用了插件。 add_filter('wp_generate_attachment_metadata','replace_uploaded_image'); function replace_uploaded_image($image_data) { // if there is no large image : return if ( !isset(
  • Python:如何使用PyQt调整光栅图像的大小(Python: How to Resize Raster Image with PyQt)
    问题 我需要找到一种方法来将输入栅格图像(例如jpg)的大小调整为指定的宽度/高度分辨率(以像素为单位)。 如果PyQt在调整新图像的大小时将保持原始图像的宽高比(这样就不会拉伸,而只能缩放),那就太好了。 src ='/Users/usrName/Images/originalImage.jpg'(2048x1024)(矩形图像2:1比例)dest ='/Users/usrName/Images/originalImage_thumb.jpg'(64x64)(输出图像为1:1正方形)比率)。 提前致谢! 发布的结果函数: ...可用于调整大小并将图像转换为QT到目前为止支持的任何格式...,例如:'bmp','gif','jpg','jpeg','png','pbm', 'tiff','svg','xbm' def resizeImageWithQT(src, dest): pixmap = QtGui.QPixmap(src) pixmap_resized = pixmap.scaled(720, 405, QtCore.Qt.KeepAspectRatio) if not os.path.exists(os.path.dirname(dest)): os.makedirs(os.path.dirname(dest)) pixmap_resized.save(dest) 回答1
  • 如何使用ImageField模型调整通过Django上传的图像文件的大小? [关闭](How can I resize an image file uploaded with Django using an ImageField Model? [closed])
    问题 在这里很难说出要问什么。 这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,因此不能以目前的形式合理地回答。 如需帮助澄清此问题以便可以重新打开,请访问帮助中心。 8年前关闭。 将通过Django表单上传的图像文件调整为ImageField的最直接方法是什么? 回答1 我很生气,找不到一个完整的工作示例,只能在这里和那里找到一些地方。 我设法自己解决了问题。 这是完整的示例,我将其放在表单的clean()方法中(您也可以以完全相同的方式覆盖模型save()方法-更改ImageField的file属性)。 import StringIO from PIL import Image image_field = self.cleaned_data.get('image_field') image_file = StringIO.StringIO(image_field.read()) image = Image.open(image_file) w, h = image.size image = image.resize((w/2, h/2), Image.ANTIALIAS) image_file = StringIO.StringIO() image.save(image_file, 'JPEG', quality=90) image_field.file = image
  • 在JavaFX中调整窗口大小时如何调整图像大小(How to resize an image when resizing the window in JavaFX)
    问题 我希望在用户拖动主窗口时自动调整图像大小。 那可能吗? 我有以下代码来设置一定大小的窗口。 它还从外部URL加载图像。 @Override public void start(Stage primaryStage) { MenuBar menuBar=new MenuBar(); Menu menuGame = new Menu("Game"); MenuItem newGame = new MenuItem("New Game F1"); MenuItem exit = new MenuItem("Exit F2"); exit.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { primaryStage.close(); } }); menuGame.getItems().addAll(newGame,new SeparatorMenuItem(),exit); menuBar.getMenus().addAll(menuGame); Image image = new Image("http://docs.oracle.com/javafx/" + "javafx/images/javafx-documentation.png")
  • 如何在Python Imaging Library中调整大小调整后的图像的质量?(How to adjust the quality of a resized image in Python Imaging Library?)
    问题 我正在PIL上工作,需要知道在调整图像大小或缩略图时是否可以调整图像质量。 据我所知,默认质量设置为85。在调整大小时可以调整此参数吗? 我目前正在使用以下代码: image = Image.open(filename) image.thumbnail((x, y), img.ANTIALIAS) ANTIALIAS参数大概提供了最好的质量。 我需要知道我们是否可以在质量选项上获得更多的详细信息。 回答1 手动使用PIL的resize方法: image = image.resize((x, y), Image.ANTIALIAS) # LANCZOS as of Pillow 2.7 其次是保存方法 quality_val = 90 image.save(filename, 'JPEG', quality=quality_val) 看看Photologue中models.py的来源,看看他们是如何做到的。 回答2 ANTIALIAS绝对无法与“ 85”质量水平相提并论。 ANTIALIAS参数告诉缩略图方法使用哪种算法将像素从一种尺寸重新采样到另一种尺寸。 例如,如果我有一个3x3的图像,如下所示: 2 2 2 2 0 2 2 2 2 我将其调整为2x2,一种算法可能会给我: 2 2 2 2 因为附近的大多数像素为2s,而另一个可能给我: 1 1 1 1 为了考虑到中间的0。
  • 如何调整UIImage的大小以减小上传图像的大小(How do I resize the UIImage to reduce upload image size)
    问题 我一直在搜索google,只遇到了降低高度/宽度或通过CoreImage编辑UIImage外观的库。 但是我还没有看到或找到一个库,这篇文章解释了如何减小图像大小,因此在上载时,它不是完整的图像大小。 到目前为止,我有这个: if image != nil { //let data = NSData(data: UIImagePNGRepresentation(image)) let data = UIImagePNGRepresentation(image) body.appendString("--\(boundary)\r\n") body.appendString("Content-Disposition: form-data; name=\"image\"; filename=\"randomName\"\r\n") body.appendString("Content-Type: image/png\r\n\r\n") body.appendData(data) body.appendString("\r\n") } 它正在发送12MB的照片。 如何将其减小到1mb? 谢谢! 回答1 Xcode 9•Swift 4或更高版本 编辑/更新:对于iOS10 +,我们可以使用UIGraphicsImageRenderer。 对于较早的Swift语法,请检查编辑历史记录。
  • 如何使用php调整图像大小?(How to image resize using php?)
    问题 从数据库检索图像,然后将图像复制到另一个具有相同名称的文件夹中,并以150x150调整图像大小。 我不知道在构图时实际的问题在哪里。 这是我的PHP代码。 $s=mysql_query("select * from photo_gallery where image_id = '".$image_id."'"); $r = mysql_fetch_array($s); echo $filename = 'user_data/'.$r['image_name']; $filname1 = explode("/",$filename); echo $filname1[0]; echo "<br>"; echo $filename = $filname1[1]; 回答1 我认为这会对您有所帮助。 $path = getcwd(); $oldpic = $path.'/user_data/'.$r['image_name']; $array = explode("/",$oldpic); $count = count($array); $name = $array[$count-1]; $src = $oldpic; $dest = $path."/user_data/thumbnail/".$name; //Genrating the image from there
  • 如何使用Java调整图像大小?(How can I resize an image using Java?)
    问题 我需要调整PNG,JPEG和GIF文件的大小。 如何使用Java做到这一点? 回答1 加载图像后,您可以尝试: BufferedImage createResizedCopy(Image originalImage, int scaledWidth, int scaledHeight, boolean preserveAlpha) { System.out.println("resizing..."); int imageType = preserveAlpha ? BufferedImage.TYPE_INT_RGB : BufferedImage.TYPE_INT_ARGB; BufferedImage scaledBI = new BufferedImage(scaledWidth, scaledHeight, imageType); Graphics2D g = scaledBI.createGraphics(); if (preserveAlpha) { g.setComposite(AlphaComposite.Src); } g.drawImage(originalImage, 0, 0, scaledWidth, scaledHeight, null); g.dispose(); return scaledBI; } 回答2 我刚刚发布了FWIW(Apache
  • 如何在Node JS中调整图像大小(How to resize image in Node js)
    问题 在将图像上传到s3(amazon)之前,需要调整图像大小。 我尝试了此功能,但无法正常工作。 这是上传图像的功能。 我的文件名为: beach_life-normal.jpg 我尝试了这个新代码,但仍然无法正常工作!!! 这是我的代码: var AWS = require('aws-sdk'), fs = require('fs'); var express = require("express"); var app = express(); var im = require('imagemagick'); // For dev purposes only AWS.config.update({ accessKeyId: '', secretAccessKey: '' }); // Read in the file, convert it to base64, store to S3 var fileStream = fs.createReadStream('beach_life-normal.jpg'); fileStream.on('error', function (err) { if (err) { throw err; } }); fileStream.on('open', function () { var s3 = new AWS.S3(); im.resize
  • 在codeigniter中设置基本URL(Set up the base url in codeigniter)
    问题 我在代码点火器中具有这样的目录结构: Appsite -website -application -images 当我在index.php中访问图像时,我使用了: <img src="http://localhost/Appsite/website/images/images.PNG" href为: <li class=""><a href="http://localhos/tAppsite/website/index.php/home/">Home</a></li> 我认为在访问代码点火器中的图像或库时,包括http://localhost不是一个好习惯。 所以,我试图改变$config['base_url']在config.php到$config['base_url'] = "http://".$_SERVER["HTTP_HOST"]."/"; 现在,我更新了图像源和其他库源,删除了本地主机和目录文件夹的名称: <img src="images/images.PNG”> <li class=""><a href= <?php echo base_url;?> /website/index.php/home/">Home</a></li> 但是我得到了错误。 它说找不到对象。 可以帮我吗? 回答1 在Config.php中 $config['base_url'] =
  • 如何调整图像C#的大小(How to resize an Image C#)
    问题 由于Size , Width和Height是System.Drawing.Image Get()属性; 如何在运行时使用C#调整Image对象的大小? 现在,我正在使用以下方法创建一个新Image : // objImage is the original Image Bitmap objBitmap = new Bitmap(objImage, new Size(227, 171)); 回答1 这将执行高质量的调整大小: /// <summary> /// Resize the image to the specified width and height. /// </summary> /// <param name="image">The image to resize.</param> /// <param name="width">The width to resize to.</param> /// <param name="height">The height to resize to.</param> /// <returns>The resized image.</returns> public static Bitmap ResizeImage(Image image, int width, int height) { var destRect = new
  • 如何在OpenCV中将图像调整为特定大小?(How to resize an image to a specific size in OpenCV?)
    问题 IplImage* img = cvLoadImage("something.jpg"); IplImage* src = cvLoadImage("src.jpg"); cvSub(src, img, img); 但是源图像的大小与img不同。 是否有任何opencv函数将其大小调整为img大小? 回答1 您可以使用cvResize。 或者更好地利用C ++接口(例如cv::Mat代替IplImage和cv::imread代替cvLoadImage ),然后使用cv::resize其处理内存分配和释放本身。 回答2 此处记录了您需要的两个功能: imread:从磁盘读取图像。 图像调整大小:调整为任意大小。 简而言之: // Load images in the C++ format cv::Mat img = cv::imread("something.jpg"); cv::Mat src = cv::imread("src.jpg"); // Resize src so that is has the same size as img cv::resize(src, src, img.size()); 而且,请停止使用旧的且完全不推荐使用的IplImage *类 回答3 供您参考,python等效项是: imageBuffer = cv.LoadImage(
  • 如何在Windows 10 UWP中复制和调整图像大小(How to Copy and Resize Image in Windows 10 UWP)
    问题 我使用了http://www.codeproject.com/Tips/552141/Csharp-Image-resize-convert-and-save中的代码以编程方式调整图像大小。 但是,该项目使用System.Drawing库,Windows 10应用程序不可用。 我尝试使用Windows.UI.Xaml.Media.Imaging的BitmapImage类代替,但是它似乎没有提供System.Drawing的功能。 有谁能在Windows 10中调整图像大小(按比例缩小)? 我的应用程序会从多个来源处理图像,以不同的格式/大小,我试图来调整实际图像,以节省空间,而不是让该应用程序的大小以适合Image中正在显示它。 编辑 我已经修改了上述链接中的代码,并针对我的特定需求进行了修改。 这里是: public static BitmapImage ResizedImage(BitmapImage sourceImage, int maxWidth, int maxHeight) { var origHeight = sourceImage.PixelHeight; var origWidth = sourceImage.PixelWidth; var ratioX = maxWidth/(float) origWidth; var ratioY =
  • 使用C#如何调整jpeg图像的大小?(Using C# how can I resize a jpeg image?)
    问题 使用C#如何调整jpeg图像的大小? 代码示例会很棒。 回答1 我正在使用这个: public static void ResizeJpg(string path, int nWidth, int nHeight) { using (var result = new Bitmap(nWidth, nHeight)) { using (var input = new Bitmap(path)) { using (Graphics g = Graphics.FromImage((System.Drawing.Image)result)) { g.DrawImage(input, 0, 0, nWidth, nHeight); } } var ici = ImageCodecInfo.GetImageEncoders().FirstOrDefault(ie => ie.MimeType == "image/jpeg"); var eps = new EncoderParameters(1); eps.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L); result.Save(path, ici, eps); } } 回答2 C#(或更确切地说:.NET框架)本身不提供这种功能