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. angular2 学习笔记 (Typescript - Attribute & reflection & decorator)

    更新 : 2018-11-27 { date: Date } 之前好像搞错了,这个是可以用 design:type 拿到的 { date: Date | null } 任何类型一但配上了 | 就 de ...

  2. 非递归遍历二叉树Java实现

    2018-10-03 20:16:53 非递归遍历二叉树是使用堆栈来进行保存,个人推荐使用双while结构,完全按照遍历顺序来进行堆栈的操作,当然在前序和后序的遍历过程中还有其他的压栈流程. 一.Bi ...

  3. what are stop words

    what are stop words 一.总结 一句话总结:就是在seo的关键词中不要有stop words,不然的话搜索引擎会直接忽略 stop words  most common  words ...

  4. Setting the Java Class Path

    The class path is the path taht Java Runtime Environment(JRE) searches for classes and other resourc ...

  5. What is a working set and how do I use it?

    //http://www.avajava.com/tutorials/lessons/what-is-a-working-set-and-how-do-i-use-it.html Working se ...

  6. group by 显示

    public static void PrintPersons()         {             //准备数据             DataTable dt = new DataTa ...

  7. Lab 6-1

    LABS The goal of the labs for this chapter is to help you to understand the overall functionality of ...

  8. Post四种Content-Type

    application/x-www-form-urlencoded 这应该是最常见的 POST 提交数据的方式了.浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 app ...

  9. 遍历input文本框

    最近写的一个项目中,页面中有很多的“text文本框”和“select下拉框” 校验input框和select框是否非空,如果为空给出提示.反之,隐藏提示内容. html  页面中的input类型有ty ...

  10. php二分法查找

    //二分查找(数组里查找某个元素) function bin_sch($array, $low, $high, $k) { if ($low <= $high) { $mid = intval( ...