簡體   English   中英

我想在我的 PHP API 中使用 javascript 代碼

[英]I want to use a javascript code in my PHP API

I am using a javascript code in my PHP API but when i am calling that API from android app or POSTMAN the JS doesn't get executed it just gets printed so is there any way to use it with PHP or can anyone convert my JS code到我可以在我的 API 中使用的 PHP 代碼

這是 JS 庫 -

    var ntc = {
    
        init: function() {
          var color, rgb, hsl;
          for(var i = 0; i < ntc.names.length; i++)
          {
            color = "#" + ntc.names[i][0];
            rgb = ntc.rgb(color);
            hsl = ntc.hsl(color);
            ntc.names[i].push(rgb[0], rgb[1], rgb[2], hsl[0], hsl[1], hsl[2]);
          }
        },
      
        name: function(color) {
      
          color = color.toUpperCase();
          if(color.length < 3 || color.length > 7)
            return ["#000000", "Invalid Color: " + color, false];
          if(color.length % 3 == 0)
            color = "#" + color;
          if(color.length == 4)
            color = "#" + color.substr(1, 1) + color.substr(1, 1) + color.substr(2, 1) + color.substr(2, 1) + color.substr(3, 1) + color.substr(3, 1);
      
          var rgb = ntc.rgb(color);
          var r = rgb[0], g = rgb[1], b = rgb[2];
          var hsl = ntc.hsl(color);
          var h = hsl[0], s = hsl[1], l = hsl[2];
          var ndf1 = 0; ndf2 = 0; ndf = 0;
          var cl = -1, df = -1;
      
          for(var i = 0; i < ntc.names.length; i++)
          {
            if(color == "#" + ntc.names[i][0])
              return ["#" + ntc.names[i][0], ntc.names[i][1], true];
      
            ndf1 = Math.pow(r - ntc.names[i][2], 2) + Math.pow(g - ntc.names[i][3], 2) + Math.pow(b - ntc.names[i][4], 2);
            ndf2 = Math.pow(h - ntc.names[i][5], 2) + Math.pow(s - ntc.names[i][6], 2) + Math.pow(l - ntc.names[i][7], 2);
            ndf = ndf1 + ndf2 * 2;
            if(df < 0 || df > ndf)
            {
              df = ndf;
              cl = i;
            }
          }
      
          return (cl < 0 ? ["#000000", "Invalid Color: " + color, false] : ["#" + ntc.names[cl][0], ntc.names[cl][1], false]);
        },
      
        // adopted from: Farbtastic 1.2
        // http://acko.net/dev/farbtastic
        hsl: function (color) {
      
          var rgb = [parseInt('0x' + color.substring(1, 3)) / 255, parseInt('0x' + color.substring(3, 5)) / 255, parseInt('0x' + color.substring(5, 7)) / 255];
          var min, max, delta, h, s, l;
          var r = rgb[0], g = rgb[1], b = rgb[2];
      
          min = Math.min(r, Math.min(g, b));
          max = Math.max(r, Math.max(g, b));
          delta = max - min;
          l = (min + max) / 2;
      
          s = 0;
          if(l > 0 && l < 1)
            s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l));
      
          h = 0;
          if(delta > 0)
          {
            if (max == r && max != g) h += (g - b) / delta;
            if (max == g && max != b) h += (2 + (b - r) / delta);
            if (max == b && max != r) h += (4 + (r - g) / delta);
            h /= 6;
          }
          return [parseInt(h * 255), parseInt(s * 255), parseInt(l * 255)];
        },
      
        // adopted from: Farbtastic 1.2
        // http://acko.net/dev/farbtastic
        rgb: function(color) {
          return [parseInt('0x' + color.substring(1, 3)), parseInt('0x' + color.substring(3, 5)),  parseInt('0x' + color.substring(5, 7))];
        },
      
        names: [
      ["000000", "black"],
      ["070707", "black"],
      ["0F0F0F", "black"],
      ["121111", "black"],
      ["181414", "black"],
      ["100C0C", "black"],
      ["1B1A1A", "black"],
      ["0A0707", "black"],
      ["0B0101", "black"],
      ["0A0505", "black"],
      ["F0F8FF", "blue"],
      ["1C34DB", "blue"],
      ["32CD32", "green"],
      ["41DC2D", "green"],
      ["1CDC03", "green"],
      ["32CD32", "green"],
      ["FFFAF0", "white"],
      ["FFFFFF", "white"],
      ["F7F5F5", "white"],
      ["FCFCFC", "white"],
      ["FEF7F7", "white"],
      ["880808", "red"],
      ["AA4A44", "red"],
      ["800020", "red"],
      ["FF0000", "red"],
      ["CD5C5C", "red"],
      ["800000", "pink"],
      ["FC07EA", "pink"],
      ["F520E5", "pink"],
      ["BA08AD", "pink"],
      ["CB25BF", "pink"],
      ["F719E7", "pink"],
      ["663399", "purple"],
      ["AF00FC", "purple"],
      ["B825F9", "purple"],
      ["C13FFA", "purple"],
      ["A534D6", "purple"],
      ["A109E3", "purple"],
      ["D57EFB", "purple"],
      ["FFFFE0", "yellow"],
      ["F7E90B", "yellow"],
      ["F7EB29", "yellow"],
      ["E7DB1B", "yellow"],
      ["C5BB12", "yellow"]
      ]
      
      }
      
      ntc.init();

該庫用於獲取從其中的數組傳遞給它的十六進制顏色的最接近的十六進制顏色名稱。

這就是我在我的 php 文件中使用它的方式 -

<!-- Include name that color library -->
<script type="text/javascript" src="color.js"></script>

<script type="text/javascript">
    // 1. You need a hex code of the color
    var ColorCode = "<?=$_REQUEST['hex_color']?>";

    // 2. Rate the color using NTC
    var ntcMatch  = ntc.name(ColorCode);
    
    // 3. Handle the result. The library returns an array with the identified color.

    // 3.A RGB value of closest match e.g #01826B
    console.log(ntcMatch[0]);
    // Text string: Color name e.g "Deep Sea"
    console.log(ntcMatch[1]);
    document.write(ntcMatch[1]);
    // True if exact color match, a Boolean
    console.log(ntcMatch[2]);
</script>

當我從 postman 或 android 應用程序調用它時得到的結果 -

郵遞員的結果圖像

我在瀏覽器中得到的結果,我需要在 postman -

在此處輸入圖像描述

你可以試試node js 只需將其安裝在您的后端,然后創建一些文件名為color.js或類似名稱的js腳本,然后從您的php調用它,如下所示:

exec("node path/to/color.js $argsString", $output);

會有所幫助:

提供的答案在某種意義上具有誤導性,它沒有為實際問題提供實際的解決方案。

你可以執行一個小的 API 來在 NodeJS 運行時運行這個精確的 JS 代碼,但是你如何處理已經存在的 PHP 代碼呢?

OP:你的 JS 代碼並不難,你應該能夠在 PHP 中逐位復制它,這些板是為了幫助人們克服問題,但這不是一個。 即使可能有通過 PHP 運行 JS 的解決方案(我懷疑因為只是寫它讓我不寒而栗),將它翻譯成正確的 PHP ZC1C425268E68385D14AB5074C17A 確實更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM