function resizephotos(directory, wh, isrecursive, isoverwrite, savetopath, supportFormat)
% resizephotos: resize a batch of photos
%
% resizephotos -dir max_width_and_height, will let you choose a directory,
% and resize all the photos in the directory. When max_width_and_height is
% omitted, it uses 1600 by default(1600px is enough for most monitors).
%
% resizephotos -files max_width_and_height, will let you choose some files,
% and resize all the files in the directory.
%
% You might be asked for whether to recursively resize all the photos in
% subdirectories.
%
% and You might be asked for whether to overwrite the original files. If
% you choose 'No', the program will save the resized images in new
% directories or files with prefix 'resize-'.
%
% resizephotos(file_or_directory, max_width_and_height, is_recursive, ...
% is_overwrite, path_to_save): you can use the function by specifying
% the path of the directories and files. When using this method, you can
% specific the max width and height of the resized photos. When path_to_save
% is omitted, the path to save the resized photos will generated automatically
% depends on is_overwrite parameter.
%
%
% See also imresize
%
% Copyright 2010, zhiqiang.org
% author: zhang@zhiqiang.org, url:
% http://zhiqiang.org/blog/it/batch-resize-images-using-matlab.html
% $Revision: 1.1.6.28.2.1 $ $Date: 2009/01/27 04:47:43 $ %% cope with the input parameters
% if the directory is not set, we open a file select dialog for use to
% select the files or path to deal with
if nargin == 0 || (nargin >= 1 && ischar(directory) && strcmp(directory, '-dir'))
directory = uigetdir;
% let user to choose whether recursively resize all the subdirectories
tmp = questdlg('Did you want to recursively resize all the subdirectories?');
if strcmp('Yes', tmp)
isrecursive = true;
else strcmp('No', tmp)
isrecursive = false;
end
isoverwrite = askforoverwrite();
elseif (nargin >= 1 && ischar(directory) && strcmp(directory, '-files'))
[p, f] = uigetfile({'*.*', 'All files'}, 'MultiSelect', 'on');
if isnumeric(p) && ~p
return;
end
directory = cell(size(p));
if iscell(p)
for i = 1:numel(p)
directory{i} = [f, p{i}];
end
else
directory=[f p];
end
isoverwrite = askforoverwrite();
end % set other parameters
if ~exist('wh', 'var'), wh = 1600; elseif ischar(wh), wh = eval_r(wh); end %����eval����_r
if ~exist('isrecursive', 'var'), isrecursive = false; end
if ~exist('isoverwrite', 'var'), isoverwrite = false; end
if ~exist('savetopath', 'var'), savetopath = []; end
if nargin <= 5 || isempty(supportFormat), supportFormat = '*'; end %% mult-files
% if directory is a cell, it indicate multi-files or multi-directories,
% we resize them one by one if iscell(directory)
for i = 1:numel(directory)
resizephotos(directory{i}, wh, isrecursive, isoverwrite, savetopath, supportFormat);
end
return;
end %% if everything are OK if exist(directory, 'file') && ~isdir(directory) % for a file,
if nargin <= 4 || isempty(savetopath)
if isoverwrite
savetopath = directory;
else
[pd, fd] = lastdirectory(directory);
savetopath = [pd, 'resize-', fd];
end
end
resizesinglephoto(directory, wh, savetopath);
elseif isdir(directory) % if directory is a real directory
% the last char of directory should be a '\'
if directory(end) ~= '\'
directory = [directory, '\'];
end
% generate the saved directory
if nargin <= 4 || isempty(savetopath) % when at the first recursive and savetopath is not set
% we need to generate the saved directory
if isoverwrite
savetopath = directory;
elseif ~isoverwrite
[savetopath, lastd] = lastdirectory(directory);
savetopath = [savetopath, 'resize-', lastd, '\'];
end
% when the savetopath do not exist, we create one
if ~isdir(savetopath)
mkdir(savetopath); %����������������
end
end % now we resize all photos in current directory, and recursive resize
% all the directories if needed
allfiles = dir(directory); %����������������(������������)������������������ % before we generate now image file, we first make sure the savetopath
% exists, otherwise generate it.
if ~isdir(savetopath)
savetopath=[savetopath(1:end-1) 'resize' '\'];
mkdir(savetopath); %��������������������������������resize
end
for i = 1:numel(allfiles)
cur = allfiles(i).name;
% ignore the path '.' and '..'
if numel(cur) > 2 || ~min(cur == '.')
if allfiles(i).isdir && isrecursive
resizephotos([directory cur '\'], wh, isrecursive, isoverwrite, ...
[savetopath cur '\'], supportFormat);
elseif ~allfiles(i).isdir
resizesinglephoto([directory cur], wh, [savetopath cur]);
end
end
end
end %% resize single photo, save it to savetopath
function resizesinglephoto(photo, wh, savetopath) try
I = imread(photo);
catch ME %#ok<NASGU>
% disp(ME.message);
disp(['!!! ' photo ' is not recognized as an image file, and it''s ignored']);
return;
end % [w, h] is the width and height of original graph
w = size(I, 1);
h = size(I, 2); % ����resize�������� [maxw, maxh]
if numel(wh) == 1
if w > h
maxw = wh;
maxh = wh*h/w;
else
maxh = wh;
maxw = wh*w/h;
end
else
maxw = wh(1);
maxh = wh(2);
if (w-h)*(maxw-maxh) < 0
[maxw, maxh] = deal(h, w);
end if w/h < maxw/maxh
maxw = maxh*w/h;
else
maxh = maxw*h/w;
end
end if maxw < w
I = imresize(I, [maxw, maxh]); %����������������������������������������������������
end
imwrite(I, savetopath);
disp([photo ' is resized, and is saved to ' savetopath]); %% lastdirectory
function [pd, ld] = lastdirectory(d)
% return the last directory, for example, lastdirectory('\abc\edf\') =
% ['\abc\','edf']. When d is a file, return the path and the file name, i.e
% lastdirectory('abc\def\x.jpg') = ['abc\def\', 'x.jpg'] % remove the last \
if isdir(d) && d(end) == '\'
d = d(1:end-1);
end % if there is a \
if max(d=='\')
ld = d(find(d=='\', 1, 'last')+1:end);
else
ld = d;
end pd = d(1:end-numel(ld)); %% ask for whether to overwrite original files
function isoverwrite = askforoverwrite()
tmp = questdlg(['Did you want to overwrite the original files? ' ...
'if you choose No, we will add a ''resize-'' prefix to your ' ...
'files or directories.']);
if strcmp('Yes', tmp)
isoverwrite = true;
elseif strcmp('No', tmp)
isoverwrite = false;
end

  

MATLAB 批量处理图片的更多相关文章

  1. 安装glue,用glue批量处理图片的步骤

     glue批量处理图片:http://glue.readthedocs.io/en/latest/quickstart.html#and-why-those-css-class-names 首先需要安 ...

  2. photoshop动作面板批量处理图片边框技巧

    1,想给图片加上边框,在不改变图片大小的前提下,可以这样做:ctrl+a,全选图片,然后“编辑”-----“描边”,在跳出来的选项卡里面可以设置边框颜色,大小,位置,及混合模式, ,我们设置好了,就可 ...

  3. matlab批量读取一个文件夹里类似命名的mat文件

    参考网址: Matlab读取同一路径下多个txt或mat文件总结 matlab 批量读取数据文件.mat .dat 整理:matlab批量读入数据文件的方法 首先命名方式体现在只是名字里数字有变化,其 ...

  4. PS如何批量处理图片

    喜爱摄影的朋友可能都有这样的体会,相机里面存了大量的图片,一般都是2048×1536或者更大像素的照片,每张都有1M以上,如果设置的清晰度高,则照片就更大,这样的图片是无法上传到博客中的(博客要求每张 ...

  5. 使用matlab批量处理图像后在指定文件夹存储

    使用matlab批量处理图像后在指定文件夹存储 clear;clc;close all; Files=dir('D:\文件及下载相关\文档\MATLAB\postgraduate\Kodak\*.jp ...

  6. Shell 命令行批量处理图片文件名

    Shell 命令行批量处理图片文件名 从网上下载了一堆图片,有的是*.jpg的,有的是*.jpeg的.并且文件名有长有短,很是糟心.因此,我想把这些文件给全部整理好,当然是用shell来处理啦! 说干 ...

  7. MATLAB批量修改图片名称

    申明:转载请注明出处. 设在“D:\UserDesktop\pic\”目录下有很多张格式为jpg照片,命名不规则,如图. 现在用MATLAB批量修改所有图片的命名格式,改为1.jpg,2.jpg,.. ...

  8. matlab批量灰色预测

    没事玩了一下matlab 发现现在网上的代码都是一组数据预测 所以我就写个批量数据的预测 顺便学习下matlab ----------------------------------我是快乐的分割线- ...

  9. Matlab批量读取文件夹文件

    现在有一个文件夹 里面有50个左右的txt文件 每个文件大概三万行 两列 第一列是字符串 第二列是浮点数字 我只需要读第二列 现在我想写一个.M文件 批量读取这个文件夹里的txt文件 读取完以后的数组 ...

随机推荐

  1. 拖图UI和纯代码UI

    1拖图UI, 优点:适合快速实验各种天马行空的想法 缺点:太多的storyBoard不好管理,不适合较大的项目,如果一个项目有价值,或成熟了,为了维护拓展,就最好改为纯代码 2纯代码UI 优点:1好维 ...

  2. 图像识别 | AI在医学上的应用 | 深度学习 | 迁移学习

    参考:登上<Cell>封面的AI医疗影像诊断系统:机器之心专访UCSD张康教授 Identifying Medical Diagnoses and Treatable Diseases b ...

  3. 20171026python读取txt写入csv

    import csv def get_lines(filepath): with open(filepath) as file_object: lines=set(file_object.readli ...

  4. 20165309 实验一 Java开发环境的熟悉

    20165309 实验一 Java开发环境的熟悉 一.实验内容及步骤 (一)命令行下Java程序开发 在Linux下用ctrl+alt+T打开终端,用mkdir创建文件夹后cd进入. 在vim下键入如 ...

  5. python记录_day10 动态传参 命名空间 作用域

    一.动态传参 动态传参用到 *args 和 **kwargs ,*号表示接收位置参数,args是参数名:**表示接收关键字参数,kwargs是参数名 def chi(*food): print(foo ...

  6. reflow 和 repaint

    Reflow(渲染):对于DOM结构中的各个元素都有自己的盒模型,浏览器根据各种样式(浏览器的.开发人员定义的等)来计算,并根据计算结果将元素放到它该出现的位置,这个过程称之为reflow. refl ...

  7. csu oj 1344: Special Judge

    Description Given a positive integer n, find two non-negative integers a, b such that a2 + b2 = n. I ...

  8. 使用LVM方式安装Ubuntu 16.04

    --- By 小甘丶 注: 这里只讲解如何配置LVM,其他不再陈述! 这个方法,通用的!只要操作系统支持LVM即可!(个人推测,尚未证实) 配置好虚拟机后,开始安装,先进入Ubuntu使用界面,对磁盘 ...

  9. mybatis*中DefaultVFS的logger乱码问题

    从网上下的Java Persistence with MyBatis 3的源码 出现这个问题的原因是logback记日志的时候乱码 ResolverUtil - Not a JAR: file:... ...

  10. MongoDB 教程(四):MongoDB 概念解析

    概述: 不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档.集合.数据库,下面我们挨个介绍. 下表将帮助您更容易理解Mongo中的一些概念: 数据库 先运行数据库 C: ...