• FusionChart 水印破解方法(代码版)


      网上一直找不到有关去除水印的方法!

      正好做项目要用到这个鬼东西,折腾了一天,总算破解成功,把方法告诉大家。

    先看下破解前的效果。

    这是个很烦人的东西,而且有一个更加让人烦人的地方, 就是根本无法买!为什么,因为FusionChart官方已经停止下载了!就是说

    你想买都买不到了,这可怎么办呢?没关系,我叫你手把手破解哦 = =。

    为了成为一个好心人,今天我免费把我的FusionChart的完整版共享给大家,希望有用的人以后可以用到哦。

    ->下载地址 提取码:8tb9

    我分享给大家的FusionChart不仅仅只有js和swf文件,更有asp.net工程等,PHP等,我网上看到过很多包,不过都没我这个齐全哦。

    好吧,废话不多,开始破解,我们破解的话需要一些工具哦。

    我们先要明白,是swf文件的问题,所以我们需要下载SWF反编译工具,

    我推荐一个免费的,网上的大部分工具都很黑,要钱。

    我这个不仅是免费的,还是汉化版的。

    推荐使用Flash Decompiler Trillix ,

    -->下载地址 提取码:sfmm

    好了,我们下载完成以后,打开那个有水印的FLASH文件。

    我这里因为是曲线图,所以是Spline.swf

    然后大家可以在右边窗口看到脚本这一项。

    因为我已经找到这一句加水印的话了,所以就直接打开6。

    如果是其他的文件这句话的地方可能不同,大家如果想用Ctrf+F去查找的话,这里不能进行多文件查找,所以比较麻烦,

    查找的话,推荐使用闪客精灵,记住别买哦,这东西超贵的,给大家的只是演示,说明闪客精灵可以准确定位那一句话的具体文件的位置。

    好吧,不废话。

    下一步我们找到了这句话。

    恩,找到了,不过我们才成功一半,我们需要把文件导出成fla格式的。

    打开转换菜单,然后在右边的窗口选择SWF全部,至于要导出的FLASH版本,最好是越高越好,

    我用的ADOBE Flash cs5,如果你安装了对应版本的Flash ,那么导出成功以后会自动打开FLASH。

    这里我们先点击转换当前。

    打开了FLASH。先暂时不管他。

    我们先打开转换后的目录,里面有FLA文件盒as文件。

    我们这里在FLASH里面把所有的as文件都打开,然后再把所有的文件的任意地方打一个空格,保存,记得所有文件都要保存哦,这一步是最重要的

    如果做得不完整的话,就会造成图表缺失或者是打不开,因为后面的导出影片会编译这些文件。

    如上图,打开所有文件。

    然后我们找到底下的Chart.as文件

    依然是Ctrl+F查找Evaluation可以直接定位到那句话,去掉那句话和超链接OK。

    然后返回FLA文件,导出影片。

    替换到以前的就OK了,大功告成!

    晚上了再个大家发一个福利。大家知道FusionChart是以键值对的形式添加的就是

    <set lable='xxxx' value='xxx'>

    大家有没有注意到,我上面的Label也是数字呢?哈哈,这个数字是不是间距应该不同呢?但是为什么一样呢?

    因为FusionChart不提供2种数字的比例图,这就要我们自己去修改API,其实也不是很高深哦,我先放一张效果图。

    看到了没,间距不一样哦~~

    这个怎么实现的呢?

    首先我们需要找到他添加X轴坐标的地方,这个地方其实很难找,但是我已经找到了,直接告诉大家把。

    大家反编译出来的FLA文件附带了很多AS文件,在comfusionchartscorechartsSpline2DChart.as里面,打开这个文件

    定位到850行左右,如下图,可以看到X轴和Y轴的设置方法。

    我们把X轴注释掉(防止以后要用),然后自己写一个X轴,这里我们为了方便,就用Y轴的方法。

    嘿嘿,其实FC留了一个后门的,其实直接用这个GetAxisPositon方法就OK。

    我们来 看一下这个方法的样子。

    这个方法在SingleYAxisChart.as里面。

        function getAxisPosition(value, upperLimit, lowerLimit, startAxisPos, endAxisPos, isYAxis, xPadding)
        {
            var __reg3 = undefined;
            var __reg2 = undefined;
            var __reg1 = undefined;
            var __reg4 = undefined;
            __reg3 = upperLimit - lowerLimit;
            if (isYAxis) 
            {
                __reg2 = endAxisPos - startAxisPos;
                __reg1 = __reg2 / __reg3 * (value - lowerLimit);
                __reg4 = endAxisPos - __reg1;
            }
            else 
            {
                __reg2 = endAxisPos - startAxisPos - 2 * xPadding;
                __reg1 = __reg2 / __reg3 * (value - lowerLimit);
                __reg4 = startAxisPos + xPadding + __reg1;
            }
            return __reg4;
        }
    SingleYAxisChart.as

    注意里面有一个if (isYAxis) 哈哈,这个就是说,如果是Y轴,那么我们肯定不是Y轴。所以这个参数要写FALSE。

    下面我们回到正题,把这个方法写出来

            while (__reg2 <= this.num) 
            {
               // this.data[__reg2].x = this.num == 1 ? this.elements.canvas.x + this.elements.canvas.w / 2 : this.elements.canvas.x + this.params.canvasPadding + __reg20 * (__reg2 - 1);
                this.data[__reg2].x = this.getAxisPosition(this.data[__reg2].label, this.getMaxDataValueX(), this.getMinDataValueX(), this.elements.canvas.x, this.elements.canvas.toX, false, 0);
                this.data[__reg2].y = this.getAxisPosition(this.data[__reg2].value, this.config.yMax, this.config.yMin, this.elements.canvas.y, this.elements.canvas.toY, true, 0);
                this.data[__reg2].valTBY = this.data[__reg2].y;
                ++__reg2;
            }
    需要改动的地方

    getAxisPosition里面的参数功能是这些

    function getAxisPosition(value, upperLimit, lowerLimit, startAxisPos, endAxisPos, isYAxis, xPadding)

    value:判断是label或者value

    upperLimit:上限,放到X轴即最右边的极限

    lowerLimit:最小值

    startAxisPos:开始的坐标位置,这里直接把对应的Y改成X。

    endAxisPos:结束的坐标位置,同上

    isYAxis:是否是Y轴

    xPadding:X轴PADDING,顾名思义啦。

    这里我还创建了2个方法。一个是得到X轴最大值,一个是得到Y轴最大值,这里也可以写死,不过推荐大家写活的。

    方法如下:可以参考Y轴的方法,把value替换成label就OK了

        //获得X轴的最大值
            function getMaxDataValueX()
        {
            var __reg3 = undefined;
            var __reg4 = false;
            var __reg2 = undefined;
            __reg2 = 1;
            while (__reg2 <= this.num) 
            {
                if (__reg4 == false) 
                {
                    if (this.data[__reg2].isDefined == true) 
                    {
                        __reg4 = true;
                        __reg3 = this.data[__reg2].label;
                    }
                }
                else if (this.data[__reg2].isDefined) 
                {
                    __reg3 = this.data[__reg2].label > __reg3 ? this.data[__reg2].label : __reg3;
                }
                ++__reg2;
            }
            return __reg3;
        }
        
        //获得X轴的最小值
            function getMinDataValueX()
        {
            var __reg3 = undefined;
            var __reg4 = false;
            var __reg2 = undefined;
            __reg2 = 1;
            while (__reg2 <= this.num) 
            {
                if (__reg4 == false) 
                {
                    if (this.data[__reg2].isDefined == true) 
                    {
                        __reg4 = true;
                        __reg3 = this.data[__reg2].label;
                    }
                }
                else if (this.data[__reg2].isDefined) 
                {
                    __reg3 = this.data[__reg2].label < __reg3 ? this.data[__reg2].label : __reg3;
                }
                ++__reg2;
            }
            return __reg3;
        }
    得到最大值最小值(X轴)

    最后,晚安各位。

  • 相关阅读:
    台湾大学李宏毅机器学习教程
    自编码器AE & 变分自编码器VAE
    深度信念网络(DBN)和堆叠自编码(SAE)、深度自编码器(DAE)的区别
    花式自动编码器
    迁移和域自适应
    MMD :maximum mean discrepancy
    数据可视化工具t-SNE
    线性判别分析(LDA)
    弱监督学习
    如何生成不重复的随机数
  • 原文地址:https://www.cnblogs.com/kmsfan/p/3969844.html
Copyright © 2020-2023  润新知