| % % 格式: picci = matscii(im, width, gamma, filename) % % 其中 % im - 源文件,可以是彩色或者灰度的图片。 % width – 要得到的图片宽度。 % gamma - 对比度设定, % gamma > 1 加强对比, < 1 降低对比。 % filename – 存储生成的图片的文件名。 % % picci – 生成的ASCII格式图片 function picci = matscii(im, width, gamma, filename) % ASCII 灰度值 g = ‘$@B%8&WM#*oahkbdpqwmZO0QLCJ UYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,”^`”. ‘; g = ‘#8XOHLTI)i=+;:,. ‘; %较少的字符集,灰度效果更好 gmax = length(g); charAspect = 0.55; if nargin <=2 gamma = 1; % 默认gamma值 im = double(im); if ndims(im) == 3 %当输入的是彩色图片 im = (im(:,:,1) + im(:,:,2) + im(:,:,2))/3; % 灰度值= (R+G+B)/3 end [rows, cols] = size(im); scale = width/cols; rows = round(charAspect * scale * rows); %行列的灰度重标度 cols = round(scale * cols); im = imresize(im, [rows, cols]); %im = myrescale(im, [rows, cols]); % 使用这个函数如果你的matlab没有安装图像处理工具箱 % 按1到gmax标度图像的灰度。 im = im – min(min(im)); % 归0 im = (im/max(max(im))).^gamma;%标度化. im = round(im*(gmax-1) + 1); picci = char(zeros(rows,cols)); %在工作空间中新建为生成图像预留的内存空间 for r = 1: rows for c = 1:cols picci(r,c) = g(im(r,c)); end end if nargin == 4 %设定了文件名 [fid, msg] = fopen(filename,’wt’); error(msg); for r = 1: rows fprintf(fid,’%s\n’,picci(r, ); end fclose(fid); end %———————————————— % 完整的函数,当没有安装图像处理工具箱时保证函数正常运行 %———————————————— function newim = myrescale(im, newRowsCols) [rows,cols] = size(im); newrows = newRowsCols(1); newcols = newRowsCols(2); rowScale = (newrows-1)/(rows-1); % arrays是从1而不是0开始 colScale = (newcols-1)/(cols-1); newim = zeros(newrows, newcols); for r = 1: newrows for c = 1: newcols sourceRow = round((r-1)/rowScale + 1); sourceCol = round((c-1)/colScale + 1); newim(r,c) = im(sourceRow, sourceCol); end end |
注意笑脸的地方是Frog表情,是脚本看到:)后做的自动转换,就像qq表情打开了快捷键一样,比qq表情更糟糕的是我不知道在哪里可以关掉。
用来玩了一下,生成了一个五一照片的ASCII码,又从另外一个方面见识了阿枯的淫荡和傻泱的清纯,可惜小歪对行宽的限制,贴不上来。
);


No comments
Jump to comment form | comments rss [?] | trackback uri [?]