1

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 to a PHP code that i can use in my API

here is the JS library -

    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();

this library is used to get a closest hex color name for the hex color passed to it from the array in it.

this is how i am using it in my php file -

<!-- 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>

the result i get when i call it from postman or android app -

result image from postman

the result i get in browser and i need in postman -

enter image description here

2 Answers 2

1

You can try node js. Just install this on you back-end, then create some js script with file name like a color.js or something like that and call it from your php like this:

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

Would be helpful:

Sign up to request clarification or add additional context in comments.

Comments

1

The answer provided is misleading in the sense is doesn't provide an actual solution to the actual problem.

You could execute a small API to run this precise JS code on a NodeJS runtime, but what do you do with the already existing PHP code ?

OP : your JS code isn't really hard and you should be able to replicate it bits by bits in PHP, these boards are here to help people overcome problems but this is not one. Even if there might be solutions to run JS through PHP (which I doubt because just writing it give me shivers), it would really be easier to translate it into a proper PHP function.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.