中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] [3] [4] »
作者:
标题: 论坛色彩渐变代码生成器.bat 上一主题 | 下一主题
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『楼 主』:  论坛色彩渐变代码生成器.bat

需要sed.exe
@echo off
title 论坛色彩渐变代码生成器   V-1.2   by-vkill

::默认config:::::::::::::::::::::::::::::::::::::::::
::说明%txt%为临时文件,你可以随便自定义
set "起始色=FF0000"
set "结束色=0000FF"
set "显示文字=test color"
set "txt=ubb.txt"
:::::::::::::::::::::::::::::::::::::::::::::::::::::

::依赖文件完整性检查
sed.exe >nul 2>nul
if "%ERRORLEVEL%"=="9009" (
   echo 缺少程序依赖文件sed.exe
   echo 请到http://www.yx127.com/tools.html页面下载再运行此程序
   pause>nul
   goto :eof
                          )

:::::::::::::::::::::::::::::::::::::::::::::::::::::
:start
cls
endlocal
setlocal ENABLEDELAYEDEXPANSION
echo.
echo 直接回车表示默认,输入格式请遵照默认的例子
echo.
set "str=起始色;结束色;显示文字"
for %%? in (%str%) do (set/p=[默认%%?^=!%%?!]<nul)
echo.
echo.
for %%? in (%str%) do (set/p=%%?=<nul&set/p "%%?= ")
if "%起始色%*"=="%结束色%*" (echo 貌似没有变色哦&pause>nul&goto start)
echo.
echo 开始转换,稍等...
:::::::::::::::::::::::::::::::::::::::::::

set "显示文字= !显示文字!"

::计算%显示文字%的位数
for /f %%? in ('echo "%显示文字%"^|sed "s/^\x22//;s/\x22$//;s/[\x80-\xFF][\x40-\xFF]/&\n/g;s/[\x20-\x7F]/&\n/g"^|sed -n "$="') do (set/a ww=%%?-1)

::转换%起始色%和%结束色%到10进制
call :h2d %起始色%
set/p ad=<%txt%
call :h2d %结束色%
set/p zd=<%txt%

::计算隔多少放一个颜色
if %ad% lss %zd% (set "max=%zd%"&set "min=%ad%"&set "顺=是") else (set "max=%ad%"&set "min=%zd%"&set "顺=否")
set/a "n1=%max%-%min%"
set/a "n2=%n1%/%ww%"


::计算出每个字的颜色并转换到16进制
for /l %%? in (1,1,%ww%) do (
   set/a #%%?=%n2%*%%?+%min%
   call :d2h !#%%?!
   set/p #%%?=<%txt%
                            )

::写[color=#...]*[/color]
echo "%显示文字%"|sed "s/^\x22//;s/\x22$//;s/[\x80-\xFF][\x40-\xFF]/⒈&⒉/g;s/[\x20-\x7F]/⒈&⒉/g"|sed "s/⒈/[color=#↑]/g;s/⒉/[\/color]/g"|more>%txt%

::替换每个字的颜色
set/p var=<%txt%
if "%顺%*"=="是*" (call :换色 1 1 %ww%)
if "%顺%*"=="否*" (call :换色 %ww% -1 1)

echo ok,生成的代码在%txt%文件中,任意键后自动打开%txt%文件,请手动复制
pause>nul
start %txt%
goto start


::::::::::::::::::::::::::all call::::::::::::::::::::::::::::

::------------------------------------------------------------
:h2d
::16进制转10进制
endlocal
setlocal ENABLEDELAYEDEXPANSION
set hs=%1
set /a sum=0x!hs!
>%txt% echo %sum%
goto :eof

::------------------------------------------------------------
:d2h
::10进制转16进制
endlocal
setlocal enabledelayedexpansion
set "hs=%1"
:loop_d2h
set/a z=%hs%/16
set/a y=%hs%%%16
if %z% lss 16 (
   call :zh_d2h %y%
   call :zh_d2h %z%
   goto loop_end_d2h ) else (call :zh_d2h %y%)
set hs=%z%
goto loop_d2h
:loop_end_d2h
>%txt% echo %sum%
goto :eof
:zh_d2h
if %1 GEQ 10 (
if "%1*"=="10*" set var=A
if "%1*"=="11*" set var=B
if "%1*"=="12*" set var=C
if "%1*"=="13*" set var=D
if "%1*"=="14*" set var=E
if "%1*"=="15*" set var=F
             ) else (set var=%1)
set sum=!var!%sum%
goto :eof

::------------------------------------------------------------
:补位
endlocal
setlocal enabledelayedexpansion
set "hs=%1"
:loop_补位
if "!hs:~5,1!*"=="*" (
   set "hs=0!hs!"
   goto loop_补位
                     )
>%txt% echo !hs!
goto :eof

::-----------------------------------------------------------
:换色
endlocal
setlocal enabledelayedexpansion
for /l %%a in (%1,%2,%3) do (
  call :补位 !#%%a!
  set/p #color=<%txt%
  for /f "tokens=*" %%? in ('echo "!var!"^|sed "s/^\x22//;s/\x22$//;s/↑/!#color!/"') do (set "var=%%?")
                            )
echo "!var!"|sed "s/^[\x22 /t]*//g;s/[\x22 /t]*$//g"|more>%txt%
goto :eof
[ Last edited by vkill on 2007-3-14 at 02:26 AM ]

   此帖被 +60 点积分        点击查看详情   
评分人:【 9527 分数: +11  时间:2007-3-11 01:42
评分人:【 lxmxn 分数: +20  时间:2007-3-11 06:19
评分人:【 HUNRYBECKY 分数: +5  时间:2007-3-14 21:23
评分人:【 redtek 分数: +20  时间:2007-3-14 22:18
评分人:【 qasa 分数: +4  时间:2007-4-4 11:44


2007-3-11 01:20
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 2 楼』:  

效果:

bbs.cn-dos.net ~

特殊字符测试
!@#$%^&*()_+-={}|[]\:";'<>?,./



@#$%^&*()_+-={}|[]\:;'<>?,./

[ Last edited by vkill on 2007-3-16 at 01:47 AM ]

2007-3-11 01:20
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
huzixuan
高级用户




积分 537
发帖 219
注册 2006-10-31
来自 芜湖
状态 离线
『第 3 楼』:  

,?



江湖远
碧空长
路茫茫

    一个人漫无目的的奔跑,风,刺骨的冷....
2007-3-11 01:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huzixuan
高级用户




积分 537
发帖 219
注册 2006-10-31
来自 芜湖
状态 离线
『第 4 楼』:  





江湖远
碧空长
路茫茫

    一个人漫无目的的奔跑,风,刺骨的冷....
2007-3-11 01:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 5 楼』:  

bbs.cn-dos.net ~

!@#$%^&*()_+-={}|[]\:";'<>?,./



2007-3-11 01:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 6 楼』:  

vk

[ Last edited by ccwan on 2007-3-11 at 01:40 AM ]



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2007-3-11 01:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by slore at 2007-3-11 01:37:
bbs.cn-d[color=00C05A ...

望指教一二

2007-3-11 01:48
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 8 楼』:  

FF0000
然后中间的00从0开始增加到FF

FFFF00
然后第前2个FF开始减少到0
00FF00
…………
00FF00~00FFFF

00ffff~0000FF(绿色的减少)
0000FF~FF00FF(红色的增加上来)
最后蓝色的FF逐渐减少,就成FF0000
那么就从红到红了,完成了变化。
自己可以在桌面属性的那个自定义颜色里把鼠标从左上角缓慢拖到右上角……自己看看R G B的变化情况。
这个是彩虹色的过渡……

2007-3-11 02:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 9 楼』:  

再测试
123456789.


bbs.cn-dos.net ~


·#%*+



test color





还是不明白slore兄所说的

[ Last edited by vkill on 2007-3-14 at 02:12 AM ]

2007-3-11 02:22
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 10 楼』:  

为了gif文件的大小,图质量不好,不过足以说明效果。

你仔细看R G B数值的变化情况

附件 1: 1.gif (2007-3-11 02:35, 32.9 K,下载次数: 4)


2007-3-11 02:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 11 楼』:  

我是每隔一段10进制的数来给一个字符上色的,看来这个方法不可行

2007-3-11 02:37
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 12 楼』:  

主要还是颜色过渡太猛

2007-3-11 02:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by vkill at 2007-3-10 13:37:
我是每隔一段10进制的数来给一个字符上色的,看来这个方法不可行

我以前也是那样=。=
但是彩虹的过渡不是按10进制递增的。。。

2007-3-11 02:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 14 楼』:  

re slore
那是怎么递增的那?好象有些10进制转换到16进制,那个16进制就没有颜色是不?

2007-3-11 02:46
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 15 楼』:  

16进制也是颜色啊……

不过要分段递增,你看图在看我#8的。。。应该可以理解了吧。

2007-3-11 02:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: