Board logo

标题: 论坛色彩渐变代码生成器.bat [打印本页]

作者: vkill     时间: 2007-3-11 01: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 ]
作者: vkill     时间: 2007-3-11 01:20
效果:

bbs.cn-dos.net ~

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



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

[ Last edited by vkill on 2007-3-16 at 01:47 AM ]
作者: huzixuan     时间: 2007-3-11 01:30
,?
作者: huzixuan     时间: 2007-3-11 01:31

作者: slore     时间: 2007-3-11 01:37
bbs.cn-dos.net ~

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


作者: ccwan     时间: 2007-3-11 01:38
vk

[ Last edited by ccwan on 2007-3-11 at 01:40 AM ]
作者: vkill     时间: 2007-3-11 01:48


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

望指教一二
作者: slore     时间: 2007-3-11 02:17
FF0000
然后中间的00从0开始增加到FF

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

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


bbs.cn-dos.net ~


·#%*+



test color





还是不明白slore兄所说的

[ Last edited by vkill on 2007-3-14 at 02:12 AM ]
作者: slore     时间: 2007-3-11 02:35
为了gif文件的大小,图质量不好,不过足以说明效果。

你仔细看R G B数值的变化情况
附件 1: 1.gif (2007-3-11 02:35, 32.9 K,下载次数: 4)



作者: vkill     时间: 2007-3-11 02:37
我是每隔一段10进制的数来给一个字符上色的,看来这个方法不可行
作者: zh159     时间: 2007-3-11 02:41
主要还是颜色过渡太猛
作者: slore     时间: 2007-3-11 02:43


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

我以前也是那样=。=
但是彩虹的过渡不是按10进制递增的。。。
作者: vkill     时间: 2007-3-11 02:46
re slore
那是怎么递增的那?好象有些10进制转换到16进制,那个16进制就没有颜色是不?
作者: slore     时间: 2007-3-11 02:48
16进制也是颜色啊……

不过要分段递增,你看图在看我#8的。。。应该可以理解了吧。
作者: vkill     时间: 2007-3-11 02:54
re slore
哦,那就是
12 红
34 绿
56 蓝

着三个分段+和-吧??通过调节三段来控制是吗?》
作者: slore     时间: 2007-3-11 03:10
每一个字都需要RGB3个数字表示的颜色去定义,没一个都是0~255即16进制的00~FF

FF0000
FF0100
FF0200
.
.
.
FFFF00
第一部分。

FFFF00
FEFF00
FDFF00
.
.
.
00FF00
第2部分。这些颜色是连续的渐变。。。

每次的间隔是多少要根据字符长度。。看你要分几段了。
作者: zh159     时间: 2007-3-11 05:26
正确的是:得根据每行长度确定渐变不常,如16字符:00-11-22-33-44-55-66-77-88-99-aa-bb-cc-dd-ee-ff;8字符:11-33-55-77-99-bb-dd-ff
比较麻烦,所以统一步骤00-11-22-33-44-55-66-77-88-99-aa-bb-cc-dd-ee-ff看看能不能更好些

以上是例子

[ Last edited by zh159 on 2007-3-10 at 04:29 PM ]
作者: xswdong     时间: 2007-3-11 05:33
ceshikankanxiaoguo
作者: vkill     时间: 2007-3-11 06:08
试了下最多支持51个字符的着色
作者: slore     时间: 2007-3-11 06:32
从FF0000开始到FF00FF一共有1275个。。。

SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
作者: vkill     时间: 2007-3-11 06:49
·#%*+

这个还可以,转换的

[ Last edited by vkill on 2007-3-11 at 07:03 AM ]
作者: slore     时间: 2007-3-11 06:58
貌似只有2个颜色的过渡?
作者: vkill     时间: 2007-3-11 07:03


  Quote:
Originally posted by slore at 2007-3-11 06:58:
貌似只有2个颜色的过渡?

天知道我怎么弄的
作者: jackyggt     时间: 2007-3-13 08:58

作者: 6622186     时间: 2007-3-13 12:14
不会用, 不知是怎么回事
作者: vkill     时间: 2007-3-14 02:28
更新了下,现在可以直接处理大多数特殊字符了,已知不可以处理 ! ,还有要是有 " 的话要必须成双的出现,不如说  @#"34%$$ %$^$"
作者: zh159     时间: 2007-3-14 02:59
绿
@echo off
setlocal EnableDelayedExpansion
set Num=1
for /l %%i in (1,1,6) do (
  if !Num! LEQ 16 for %%n in (0 1 2 3 4 5 6 7 8 9 a b c d e f) do set color!Num!=ff%%n%%n00&set /a Num+=1
  if !Num! GTR 16 if !Num! LEQ 31 for %%n in (e d c b a 9 8 7 6 5 4 3 2 1 0) do set color!Num!=%%n%%n!color16:~-4!&set /a Num+=1
  if !Num! GTR 31 if !Num! LEQ 46 for %%n in (1 2 3 4 5 6 7 8 9 a b c d e f) do set color!Num!=!color31:~0,4!%%n%%n&set /a Num+=1
  if !Num! GTR 46 if !Num! LEQ 61 for %%n in (e d c b a 9 8 7 6 5 4 3 2 1 0) do set color!Num!=!color46:~0,2!%%n%%n!color46:~-2!&set /a Num+=1
  if !Num! GTR 61 if !Num! LEQ 76 for %%n in (1 2 3 4 5 6 7 8 9 a b c d e f) do set color!Num!=%%n%%n!color61:~-4!&set /a Num+=1
  if !Num! GTR 76 if !Num! LEQ 90 for %%n in (e d c b a 9 8 7 6 5 4 3 2 1) do set color!Num!=!color76:~0,4!%%n%%n&set /a Num+=1
)

:Main
cls
echo.
set Num=
set input=
set /p Num=  输入开始颜色([R]红[G]绿[B]蓝):
for %%n in (R G B) do if /i "%Num%" == "%%n" goto input
goto Main
:input
set /p input=  输入文字:
if not defined input exit
if /i "%Num%" == "R" set Num=0
if /i "%Num%" == "G" set Num=30
if /i "%Num%" == "B" set Num=60

cd.>test.txt
:loop
set /a Num+=1
>>test.txt set /p=[color=!color%Num%!]%input:~0,1%[/color]<nul
set "input=%input:~1%"
if %num% GEQ 90 set Num=
if not "%input%" == "" goto loop
start test.txt
goto Main
exit
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
作者: vkill     时间: 2007-3-14 03:14
re zh159

我也想过用set/p来单个的着色,但这样处理特殊字符太烂

123456789

字符太少了效果不怎么好,呵呵

[ Last edited by vkill on 2007-3-14 at 03:15 AM ]
作者: zh159     时间: 2007-3-14 14:51
绿
::zh159@bbs.cn-dos.net
@echo off
setlocal EnableDelayedExpansion
set Num=1
for /l %%i in (1,1,6) do (
  if !Num! LEQ 16 for %%n in (0 1 2 3 4 5 6 7 8 9 a b c d e f) do set color!Num!=ff%%n%%n00&set /a Num+=1
  if !Num! GTR 16 if !Num! LEQ 31 for %%n in (e d c b a 9 8 7 6 5 4 3 2 1 0) do set color!Num!=%%n%%n!color16:~-4!&set /a Num+=1
  if !Num! GTR 31 if !Num! LEQ 46 for %%n in (1 2 3 4 5 6 7 8 9 a b c d e f) do set color!Num!=!color31:~0,4!%%n%%n&set /a Num+=1
  if !Num! GTR 46 if !Num! LEQ 61 for %%n in (e d c b a 9 8 7 6 5 4 3 2 1 0) do set color!Num!=!color46:~0,2!%%n%%n!color46:~-2!&set /a Num+=1
  if !Num! GTR 61 if !Num! LEQ 76 for %%n in (1 2 3 4 5 6 7 8 9 a b c d e f) do set color!Num!=%%n%%n!color61:~-4!&set /a Num+=1
  if !Num! GTR 76 if !Num! LEQ 90 for %%n in (e d c b a 9 8 7 6 5 4 3 2 1) do set color!Num!=!color76:~0,4!%%n%%n&set /a Num+=1
)

:Main
cls
echo.
set RGB=
set /p RGB=  输入开始颜色([1]红[2]橙[3]黄[4]绿[5]青[6]蓝[7]紫):
for /l %%n in (1,1,7) do if "%RGB%" == "%%n" goto input
echo.
echo   输入开始颜色错误!
echo.
pause
goto Main

:input
set Num=
for %%n in (1 8 16 31 46 61 76) do set /a Num+=1&if "%RGB%" == "!Num!" set RGB=%%n
echo.
set input=
set /p input=  输入文字:
if not defined input exit

set Num=
set "str=%input%"
:Num
set "str=%str:~1%"
set /a Num+=1
if not "%str%" == "" goto Num
set step=1
for %%n in (70 40 20 10) do if %Num% lss %%n set /a step+=1

cd.>test.txt
:loop
>>test.txt set /p=[color=!color%RGB%!]%input:~0,1%[/color]<nul
set /a RGB+=%step%
set "input=%input:~1%"
if %RGB% GTR 90 set RGB=1
if not "%input%" == "" goto loop
start test.txt
goto Main
exit
012345678
0123456789012345678
012345678901234567890123456789012345678
0123456789012345678901234567890123456789
012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789

[ Last edited by zh159 on 2007-3-14 at 01:57 AM ]
作者: HUNRYBECKY     时间: 2007-3-14 21:22
VKILL ..................^_^...............[/c
作者: vkill     时间: 2007-3-16 01:39
zh159 兄的很不错
作者: wxzsky     时间: 2007-3-16 06:33
看看是什么啊!~
作者: qasa     时间: 2007-4-4 11:29









[ Last edited by qasa on 2007-4-3 at 10:41 PM ]
作者: hkymadmin     时间: 2007-4-4 14:17

作者: baomaboy     时间: 2007-4-4 14:23
_


我也玩一把试试看……呵呵——^_^

[ Last edited by baomaboy on 2007-4-4 at 02:25 PM ]
作者: lcy360     时间: 2007-4-8 09:30
@echo off
setlocal EnableDelayedExpansion
set Num=1
for /l %%i in (1,1,6) do (
  if !Num! LEQ 16 for %%n in (0 1 2 3 4 5 6 7 8 9 a b c d e f) do set color!Num!=ff%%n%%n00&set /a Num+=1
  if !Num! GTR 16 if !Num! LEQ 31 for %%n in (e d c b a 9 8 7 6 5 4 3 2 1 0) do set color!Num!=%%n%%n!color16:~-4!&set /a Num+=1
  if !Num! GTR 31 if !Num! LEQ 46 for %%n in (1 2 3 4 5 6 7 8 9 a b c d e f) do set color!Num!=!color31:~0,4!%%n%%n&set /a Num+=1
  if !Num! GTR 46 if !Num! LEQ 61 for %%n in (e d c b a 9 8 7 6 5 4 3 2 1 0) do set color!Num!=!color46:~0,2!%%n%%n!color46:~-2!&set /a Num+=1
  if !Num! GTR 61 if !Num! LEQ 76 for %%n in (1 2 3 4 5 6 7 8 9 a b c d e f) do set color!Num!=%%n%%n!color61:~-4!&set /a Num+=1
  if !Num! GTR 76 if !Num! LEQ 90 for %%n in (e d c b a 9 8 7 6 5 4 3 2 1) do set color!Num!=!color76:~0,4!%%n%%n&set /a Num+=1
)

:Main
cls
echo.
set Num=
set input=
set /p Num=  输入开始颜色([R]红[G]绿[B]蓝):
for %%n in (R G B) do if /i "%Num%" == "%%n" goto input
goto Main
:input
set /p input=  输入文字:
if not defined input exit
if /i "%Num%" == "R" set Num=0
if /i "%Num%" == "G" set Num=30
if /i "%Num%" == "B" set Num=60

cd.>test.txt
:loop
set /a Num+=1
>>test.txt set /p=[color=!color%Num%!]%input:~0,1%
<nul
set "input=%input:~1%"
if %num% GEQ 90 set Num=
if not "%input%" == "" goto loop
start test.txt
goto Main
exit
作者: zh159     时间: 2007-4-8 09:36
LS的干啥?
作者: flamey     时间: 2007-4-9 05:51
[color=#↑] [color=#↑]b[color=#↑]b[color=#↑]s[color=#↑].[color=#↑]c[color=#↑]n[color=#↑]-[color=#↑]d[color=#↑]o[color=#↑]s[color=#↑].[color=#↑]n[color=#↑]e[color=#↑]t[color=#↑] [color=#↑]爱[color=#↑]你[color=#↑]~
作者: flamey     时间: 2007-4-9 05:52
[color=#↑] [color=#↑]5[color=#↑]4[color=#↑]5[color=#↑]6[color=#↑]g[color=#↑]a[color=#↑]4[color=#↑]d[color=#↑]s[color=#↑]5[color=#↑]6[color=#↑]f[color=#↑]g[color=#↑]4[color=#↑]a[color=#↑]s[color=#↑]d[color=#↑]5[color=#↑]6[color=#↑]4[color=#↑]f[color=#↑]g[color=#↑]5[color=#↑]6[color=#↑]a[color=#↑]s[color=#↑]d[color=#↑]4[color=#↑]g[color=#↑]f
作者: flamey     时间: 2007-4-9 05:54
[color=#↑] [color=#↑]5[color=#↑]6[color=#↑]d[color=#↑]a[color=#↑]g[color=#↑]4[color=#↑]5[color=#↑]6[color=#↑]4[color=#↑]s[color=#↑]g[color=#↑]5[color=#↑]6[color=#↑]4[color=#↑]a[color=#↑]s[color=#↑]d[color=#↑]6[color=#↑]g
作者: vkill     时间: 2007-4-9 07:45


  Quote:
Originally posted by flamey at 2007-4-9 05:54:
[color=#↑] [color=#↑]5[color=#↑]6[color=#↑]d[color=#↑]a[color=#↑]g[color=#↑]4[color=#↑]5[color=#↑]6[color=# ...

貌似兄的sed有问题
作者: LONGWJR     时间: 2007-4-12 20:36
123345
作者: djq103     时间: 2007-4-25 06:08

作者: flandy     时间: 2007-4-30 06:14

作者: mzwind     时间: 2007-4-30 06:24
强呀,谢谢分享……
作者: z640919a     时间: 2007-12-3 16:39
LZ的bat
sgrgshb hhbb

zh159的bat

asdadfweagfv graenb rsn b

[ Last edited by z640919a on 2007-12-3 at 04:42 PM ]
作者: m5891662l     时间: 2008-5-3 11:29
这怎个用了,不会。。
作者: binghehan100     时间: 2008-5-7 13:38
这样...啊
作者: rdingding     时间: 2008-5-10 10:20

作者: xqx     时间: 2010-8-14 05:56
FF0000
作者: xqx     时间: 2010-8-14 05:56
我也来试试,不错,呵呵
作者: beifang1986     时间: 2010-8-18 14:25
test color