网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月30日漏签0天
pascal吧 关注:14,949贴子:132,334
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 9回复贴,共1页
<<返回pascal吧
>0< 加载中...

将图片变成字符的小工具

  • 只看楼主
  • 收藏

  • 回复
  • 狼妹宋天琢
  • begin
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • 狼妹宋天琢
  • begin
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
{
图片 到 ascii图片的转换
convert picture to ascii text picture
support format: png, jpg(jpeg), bmp
}
program pic2ascii;
{$mode objfpc}
uses
FPReadPNG, FPReadBMP, fpreadjpeg,
{$ifndef UseFile}classes,{$endif}
FPImage, sysutils;
const
ascii_chars : string = '$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`''. '; //用来替代像素的字符集合
//txtSize : integer = 100; //生在 ascii 图像的最大边的高度(未实现), output txt file max(width,height) unfinished
{全局变量, global vars}
var
img : TFPMemoryImage;
picFile, txtFile : string;
{初始化init}
procedure init();
begin
if paramcount = 1 then
begin
picFile := paramstr(1);
txtFile := 'pic2ascii.txt';
img := TFPMemoryImage.Create(0,0);
end
else if paramcount = 2 then
begin
picFile := paramstr(1);
txtFile := paramstr(2);
img := TFPMemoryImage.Create(0,0);
end
else
begin
writeln('example: pic2ascii hello.jpg');
writeln('example: pic2ascii hello.jpg hello.txt');
Halt(1);
end;
end;
{endswith}
function EndsWith(const src: String;const Substr :String):Boolean;
var
I,I2: Integer;
begin
Result := true;
I2 := Length(SubStr);
i:=length(src);
if i<i2 then exit (false);
for I := 1 to i2 do begin
if not(src[length(src)-i2+i] = Substr[i]) then begin
Result := false;
exit;
end;
end;
end;
{ReadImage}
procedure ReadImage;
{$ifndef UseFile}var str : TStream;{$endif}
t:string;
reader : TFPCustomImageReader;
begin
T := upcase (picFile);
reader:=nil;
if endsWith(t,'.BMP') then
Reader := TFPReaderBMP.Create
else if endswith(t,'.JPEG') or endswith(t,'.JPG') then
Reader := TFPReaderJPEG.Create
else if endswith(t,'.PNG') then
Reader := TFPReaderPNG.Create
else
begin
Writeln('Unknown file format : ',T);
Halt(1);
end;
if assigned (reader) then
begin img.LoadFromFile (picFile, Reader); Reader.Free; end
else
{$ifdef UseFile}
img.LoadFromFile (picFile);
{$else}
if fileexists (picFile) then
begin
str := TFileStream.create (picFile,fmOpenRead);
try
img.loadFromStream (str);
finally
str.Free;
end;
end
else
begin
writeln ('File ',picFile,' doesn''t exists!');
Halt(1);
end;
{$endif}
end;
{get_chars}
function get_chars(color : TFPColor):char;
var
l:integer;
gray : longint;
u : double;
r,g,b,alpha:integer;
begin
alpha := (color.alpha and $ff00) shr 8;
r := (color.red and $ff00) shr 8;
g := (color.Green and $ff00) shr 8;
b := (color.Blue and $ff00)shr 8;
if alpha = 0 then exit(' ');
l := length(ascii_chars);
gray := trunc( 0.2126 * r + 0.7152 * g + 0.0722 * b );
u := alpha / l ;//将256个像素均分给字符
if trunc(gray/u) < l then
exit ( ascii_chars[ trunc( gray / u ) + 1 ])
else
exit (' ');
end;
{ConvertImage}
procedure ConvertImage;
var
outputHeight, outputWidth, h, w, x, y:integer;
f : text;
begin
h := img.Height;
w := img.Width;
outputHeight:=h;
outPutWidth:=w;
{
//To Do: 按比例缩放图像
// To Do : resize picture here (unfinished)
}
assign(f,txtFile);
rewrite(f);
for y:= 1 to outputHeight do
begin
for x:=1 to outPutWidth do
write(f,get_chars(img.colors[x-1,y-1]));
writeln(f);
end;
close(f);
end;
{clean}
procedure Clean;
begin
Img.Free;
end;
{main}
begin
try
//writeln ('Initing');
Init;
//writeln ('Reading image');
ReadImage;
// writeln ('Convert image');
ConvertImage;
//writeln ('Clean up');
Clean;
except
on e : exception do
writeln ('Error: ',e.message);
end;
end.


2025-08-30 02:38:52
广告
不感兴趣
开通SVIP免广告
  • 静待花开wfy
  • 能量项链
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你选用的字符的依据是什么?


  • 静待花开wfy
  • 能量项链
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
感觉这个程序很好玩,可以给我邮箱发一份源码吗?百度云盘我这里访问不了。


  • 炎龙
  • while
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
dalao


  • 生若梦青丝绕
  • 算法导论
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
LZ666,话说我玩儿过LZ的俄罗斯方块


  • 北国宝巾地
  • 合并果子
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
傻眼了


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 9回复贴,共1页
<<返回pascal吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示