{"id":350,"date":"2020-05-14T16:58:04","date_gmt":"2020-05-14T16:58:04","guid":{"rendered":"https:\/\/demo.creativethemes.com\/blocksy\/app\/?page_id=7"},"modified":"2025-12-17T06:12:20","modified_gmt":"2025-12-17T06:12:20","slug":"home","status":"publish","type":"page","link":"https:\/\/pury.fi\/site\/","title":{"rendered":"Home"},"content":{"rendered":"\n<div class=\"wp-block-getwid-section alignfull getwid-margin-top-none getwid-margin-bottom-none\"><div class=\"wp-block-getwid-section__wrapper getwid-margin-left-none getwid-margin-right-none\" style=\"min-height:200%;padding-top:150px;padding-bottom:50px;padding-left:0px;padding-right:0px\"><div class=\"wp-block-getwid-section__inner-wrapper\"><div class=\"wp-block-getwid-section__background-holder\"><div class=\"wp-block-getwid-section__background\" style=\"background-image:url('https:\/\/pury.fi\/site\/wp-content\/uploads\/2020\/05\/ron-whitaker-mVuKCYMGZBM-unsplash.jpg')\"><div class=\"wp-block-getwid-section__background-image-wrapper\"><img decoding=\"async\" class=\"wp-block-getwid-section__background-image\" src=\"https:\/\/pury.fi\/site\/wp-content\/uploads\/2020\/05\/ron-whitaker-mVuKCYMGZBM-unsplash.jpg\" alt=\"\"\/><\/div><\/div><div class=\"wp-block-getwid-section__foreground\" style=\"opacity:0.95;background-color:#121619\"><\/div><\/div><div class=\"wp-block-getwid-section__content\"><div class=\"wp-block-getwid-section__inner-content\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-vertically-aligned-top is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:25%\">\n<p><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-top is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:55%\">\n<div class=\"wp-block-getwid-advanced-heading has-custom-font-size fs-mobile-80\" style=\"font-size:70px\"><h2 class=\"wp-block-getwid-advanced-heading__content has-text-color has-palette-color-5-color\" style=\"line-height:1.2em\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-palette-color-2-color\">PuryFi<\/mark><\/h2><\/div>\n\n\n\n<div class=\"wp-block-getwid-advanced-spacer\" style=\"height:20px\" aria-hidden=\"true\"><\/div>\n\n\n\n<style>\n   .wp-image-374 {\n      \/\/display: none;\n   }\n   .wp-block-getwid-advanced-heading {\n      margin-bottom: 0px;\n   }\n   .wp-block-getwid-advanced-heading__content {\n      margin-bottom: 0px;\n   }\n   #container-form {\n      width: 90%;\n      position: relative;\n   }\n   #container-form button {\n      cursor: pointer;\n   }\n   #container-form button:disabled {\n      cursor: not-allowed;\n   }\n   #puryform {\n      margin-left: 60px;\n   }\n   #imageform {\n      margin-top: 10px;\n      height: 500px;\n      border: 4px dashed #fff;\n      background-repeat: no-repeat;\n      background-position: center center;\n      background-size: contain;\n   }\n   #imageform #file-container {\n      position: relative;\n      height: 100%;\n   }\n   #imagetext {\n      position: absolute;\n      width: 100%;\n      height: 100%;\n      margin-top: 0px;\n      margin-bottom: 20px;\n      text-align: center;\n      line-height: 170px;\n      color: #ffffff;\n      text-shadow: 2px 2px #16a085;\n      font-family: Arial;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n   }\n   form #puryfifileinput {\n      position: absolute;\n      margin: 0;\n      padding: 0;\n      width: 100%;\n      height: 100%;\n      outline: none;\n      opacity: 0;\n   }\n   form .bottombuttom {\n      margin: 0;\n      color: #fff;\n      background: #16a085;\n      border: none;\n      #width: 508px;\n      height: 30px;\n      width: 100%;\n      transition: all 0.2s ease;\n      outline: none;\n      text-align: center;\n   }\n   .mask {\n      filter: brightness(0.4);\n      -webkit-filter: brightness(0.4);\n      -moz-filter: brightness(0.4);\n      -o-filter: brightness(0.4);\n      -ms-filter: brightness(0.4);\n   }\n   #button-bottom-container {\n      margin-top: 10px;\n   }\n\n   form .buttonfirst {\n      border-radius: 4px;\n      margin-bottom: 4px;\n   }\n\n   form .buttonlast {\n      border-radius: 4px;\n      border-bottom: 4px solid #117a60;\n   }\n\n   form .bottombuttom:disabled,\n   form .bottombuttom[disabled] {\n      background-color: #cccccc;\n      background: #cccccc;\n      transition: none;\n      border-bottom: 4px solid #cccccc;\n   }\n   .container-left {\n      width: 50px;\n      height: 250px;\n      display: inline-flex;\n      flex-direction: column;\n      position: absolute;\n      left: -60px;\n      top: 50%;\n      -ms-transform: translateY(-50%);\n      transform: translateY(-50%);\n   }\n   #typeButtonContainer {\n      display: inline-flex;\n      flex-direction: column;\n   }\n   .container-right {\n      display: block;\n      width: 110px;\n      position: absolute;\n      right: -120px;\n      top: 50%;\n      -ms-transform: translateY(-50%);\n      transform: translateY(-50%);\n   }\n   .labelButton b {\n      visibility: hidden;\n   }\n   .labelButton:hover b {\n      visibility: visible;\n   }\n\n   button.fface {\n      background-image: url(..\/static\/images\/buttons\/face_female.png);\n   }\n   button.mface {\n      background-image: url(..\/static\/images\/buttons\/face_male.png);\n   }\n   button.fgene {\n      background-image: url(..\/static\/images\/buttons\/genitals_female.png);\n   }\n   button.fgenc {\n      background-image: url(..\/static\/images\/buttons\/genitals_female_covered.png);\n   }\n   button.mgene {\n      background-image: url(..\/static\/images\/buttons\/genitals_male.png);\n   }\n   button.mgenc {\n      background-image: url(..\/static\/images\/buttons\/genitals_male_covered.png);\n   }\n   button.ftite {\n      background-image: url(..\/static\/images\/buttons\/breasts_female.png);\n   }\n   button.ftitc {\n      background-image: url(..\/static\/images\/buttons\/breasts_female_covered.png);\n   }\n   button.mtite {\n      background-image: url(..\/static\/images\/buttons\/breasts_male.png);\n   }\n   button.mtitc {\n      background-image: url(..\/static\/images\/buttons\/breasts_male_covered.png);\n   }\n   button.butte {\n      background-image: url(..\/static\/images\/buttons\/buttocks_exposed.png);\n   }\n   button.buttc {\n      background-image: url(..\/static\/images\/buttons\/buttocks_covered.png);\n   }\n   button.bellye {\n      background-image: url(..\/static\/images\/buttons\/belly.png);\n   }\n   button.bellyc {\n      background-image: url(..\/static\/images\/buttons\/belly_covered.png);\n   }\n   button.anuse {\n      background-image: url(..\/static\/images\/buttons\/anus_exposed.png);\n   }\n   button.anusc {\n      background-image: url(..\/static\/images\/buttons\/anus_covered.png);\n   }\n   button.apite {\n      background-image: url(..\/static\/images\/buttons\/armpit_exposed.png);\n   }\n   button.apitc {\n      background-image: url(..\/static\/images\/buttons\/armpit_covered.png);\n   }\n   button.feete {\n      background-image: url(..\/static\/images\/buttons\/feet_exposed.png);\n   }\n   button.feetc {\n      background-image: url(..\/static\/images\/buttons\/feet_covered.png);\n   }\n   button::-moz-focus-inner {\n      border: 0;\n   }\n   button::focus {\n      border: 0;\n   }\n   button.typeButton.fullgray {\n      -webkit-filter: grayscale(100%);\n   }\n   button.labelButton.fullgray {\n      -webkit-filter: grayscale(100%);\n   }\n   button.typeButton.selected.fullgray {\n      -webkit-filter: grayscale(100%);\n   }\n   button.labelButton.selected.fullgray {\n      -webkit-filter: grayscale(100%);\n   }\n   button.typeButton.selected {\n      border-color: #16a085;\n      -webkit-filter: grayscale(0%);\n   }\n   button.labelButton.selected {\n      border-color: #16a085;\n      -webkit-filter: grayscale(0%);\n   }\n   button.type1 {\n      background-image: url(..\/static\/images\/buttons\/blur.png);\n   }\n   button.type2 {\n      background-image: url(..\/static\/images\/buttons\/pixel.png);\n   }\n   button.type3 {\n      background-image: url(..\/static\/images\/buttons\/black.png);\n   }\n   button.type5 {\n      background-image: url(..\/static\/images\/buttons\/overdrive.png);\n   }\n   button.type4 {\n      margin-left: auto;\n      margin-top: auto;\n      font-size: 10px;\n      background-color: gray;\n      background-image: url(..\/static\/images\/buttons\/data.png);\n   }\n   button.typeButton {\n      color: white;\n      white-space: nowrap;\n      text-align: center;\n      background-size: cover;\n      background-position: center center;\n      width: 50px;\n      height: 50px;\n      min-width: 50px;\n      min-height: 50px;\n      border-radius: 4px 4px 4px 4px;\n      text-shadow: 0 0 9px #000000;\n      -webkit-filter: grayscale(40%);\n      border: 1px solid #888;\n      margin-bottom: 5px;\n   }\n   button.labelButton {\n      background-color: #25ad99;\n      flex: 0 0 50%;\n      color: white;\n      background-size: cover;\n      background-position: center center;\n      width: 50px;\n      height: 50px;\n      max-width: 50px;\n      max-height: 50px;\n      min-width: 50px;\n      min-height: 50px;\n      text-align: center;\n      padding: 0px;\n      border-radius: 4px 4px 4px 4px;\n      text-shadow: 0 0 9px #000000;\n      -webkit-filter: grayscale(80%);\n      border: 1px solid #888;\n      font-size: 10pt;\n      margin-bottom: 5px;\n   }\n\n   @keyframes spin {\n      0% {\n         transform: rotate(0deg);\n      }\n      100% {\n         transform: rotate(360deg);\n      }\n   }\n\n   #loader {\n      display: none;\n      position: absolute;\n      left: 50%;\n      top: 50%;\n      z-index: 1;\n      width: 150px;\n      height: 150px;\n      margin: -75px 0 0 -75px;\n      border: 16px solid #f3f3f3;\n      border-radius: 50%;\n      border-top: 16px solid #16a085;\n      width: 120px;\n      height: 120px;\n      -webkit-animation: spin 2s ease-in-out infinite;\n      animation: spin 2s ease-in-out infinite;\n   }\n   #overlay {\n      background-repeat: no-repeat;\n      background-position: center;\n      z-index: -1;\n      opacity: 0.4;\n      position: absolute;\n      top: -10px;\n      left: -10px;\n      width: calc(100% + 20px);\n      height: calc(100% + 20px);\n      background-size: cover;\n      filter: blur(10px) grayscale(1);\n   }\n<\/style>\n<form id=\"puryform\" enctype=\"multipart\/form-data\">\n   <div id=\"container-form\">\n      <div class=\"container-left\">\n         <div id=\"typeButtonContainer\">\n            <button class=\"typeButton type1\" type=\"button\" id=\"blur\">\n               <b>Blur<\/b>\n            <\/button>\n            <button class=\"typeButton type2 selected\" type=\"button\" id=\"pixel\">\n               <b>Pixel<\/b>\n            <\/button>\n            <button class=\"typeButton type3\" type=\"button\" id=\"black\">\n               <b>Black<\/b>\n            <\/button>\n            <button class=\"typeButton type5\" type=\"button\" id=\"overdrive\">\n               <b>Pixl+<\/b>\n            <\/button>\n            <button\n               class=\"typeButton type4\"\n               disabled=\"\"\n               type=\"button\"\n               value=\"Detect\"\n               name=\"submit\"\n               id=\"submit\"\n            >\n               Get Data\n            <\/button>\n         <\/div>\n      <\/div>\n      <div id=\"container-center\">\n         <div id=\"loader\"><\/div>\n         <div id=\"imageform\">\n            <div id=\"file-container\">\n               <div id=\"imagetext\">\n                  <b>Drag your image here or click in this area to censor it.<\/b>\n               <\/div>\n               <input\n                  type=\"file\"\n                  name=\"file\"\n                  id=\"puryfifileinput\"\n                  onchange=\"onFileSelected(event)\"\n               \/>\n               <div id=\"overlay\"><\/div>\n            <\/div>\n         <\/div>\n         <div id=\"button-bottom-container\">\n            <button\n               class=\"bottombuttom buttonfirst\"\n               disabled=\"\"\n               type=\"button\"\n               value=\"Purify\"\n               name=\"purify\"\n               id=\"purify\"\n            >\n               Purify\n            <\/button>\n            <button\n               class=\"bottombuttom buttonlast\"\n               disabled=\"\"\n               type=\"button\"\n               onclick=\"downloadImage()\"\n               id=\"downloadbtn\"\n            >\n               Download\n            <\/button>\n         <\/div>\n      <\/div>\n      <div class=\"container-right\">\n         <div id=\"labelButtonContainer\">\n            <button class=\"labelButton fface\" type=\"button\" id=\"fface\">\n               <b>\u2640 Face<\/b>\n            <\/button>\n            <button class=\"labelButton mface\" type=\"button\" id=\"mface\">\n               <b>\u2642 Face<\/b>\n            <\/button>\n\n            <button class=\"labelButton apite\" type=\"button\" id=\"apite\">\n               <b>Armpit<\/b>\n            <\/button>\n            <button class=\"labelButton apitc\" type=\"button\" id=\"apitc\">\n               <b>Armpit<\/b>\n            <\/button>\n\n            <button class=\"labelButton ftite\" type=\"button\" id=\"ftite\">\n               <b>\u2640 Breast<\/b>\n            <\/button>\n            <button class=\"labelButton ftitc\" type=\"button\" id=\"ftitc\">\n               <b>\u2640 Breast<\/b>\n            <\/button>\n\n            <button class=\"labelButton mtite\" type=\"button\" id=\"mtite\">\n               <b>\u2642 Breast<\/b>\n            <\/button>\n            <button class=\"labelButton mtitc\" type=\"button\" id=\"mtitc\">\n               <b>\u2642 Breast<\/b>\n            <\/button>\n\n            <button class=\"labelButton bellye\" type=\"button\" id=\"bellye\">\n               <b>Belly<\/b>\n            <\/button>\n            <button class=\"labelButton bellyc\" type=\"button\" id=\"bellyc\">\n               <b>Belly<\/b>\n            <\/button>\n\n            <button class=\"labelButton butte\" type=\"button\" id=\"butte\">\n               <b>Butt<\/b>\n            <\/button>\n            <button class=\"labelButton buttc\" type=\"button\" id=\"buttc\">\n               <b>Butt<\/b>\n            <\/button>\n\n            <button class=\"labelButton anuse\" type=\"button\" id=\"anuse\">\n               <b>Anus<\/b>\n            <\/button>\n            <button class=\"labelButton anusc\" type=\"button\" id=\"anusc\">\n               <b>Anus<\/b>\n            <\/button>\n\n            <button class=\"labelButton fgene\" type=\"button\" id=\"fgene\">\n               <b>\u2640 Gen.<\/b>\n            <\/button>\n            <button class=\"labelButton fgenc\" type=\"button\" id=\"fgenc\">\n               <b>\u2640 Gen.<\/b>\n            <\/button>\n\n            <button class=\"labelButton mgene\" type=\"button\" id=\"mgene\">\n               <b>\u2642 Gen.<\/b>\n            <\/button>\n            <button class=\"labelButton mgenc\" type=\"button\" id=\"mgenc\">\n               <b>\u2642 Gen.<\/b>\n            <\/button>\n\n            <button class=\"labelButton feete\" type=\"button\" id=\"feete\">\n               <b>Feet<\/b>\n            <\/button>\n            <button class=\"labelButton feetc\" type=\"button\" id=\"feetc\">\n               <b>Feet<\/b>\n            <\/button>\n         <\/div>\n      <\/div>\n   <\/div>\n<\/form>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jquery\/3.3.1\/jquery.js\"><\/script>\n<script>\n   var opened = false;\n\n   var filename = \"image\";\n   var imagebloburl;\n   var filetype = \".png\";\n\n   var transitionspeed = \"400\";\n\n   var type = \"pixel\";\n\n   var labels = [\n      \"ftite\",\n      \"ftitc\",\n      \"butte\",\n      \"buttc\",\n      \"fgene\",\n      \"fgenc\",\n      \"mgene\",\n      \"mgenc\",\n   ];\n   for (i = 0; i < labels.length; i++) {\n      $(\"#\" + labels[i]).toggleClass(\"selected\");\n   }\n\n   $(document).ready(function () {\n      $(\"form input\").change(function () {\n         $(\"#imagetext\").text(this.files.length + \" file selected\");\n      });\n   });\n\n   $(document).ready(function () {\n      $(\"#blur\").click(function () {\n         $(\".typeButton\").removeClass(\"selected\");\n         $(\"#blur\").addClass(\"selected\");\n         type = \"blur\";\n      });\n      $(\"#black\").click(function () {\n         $(\".typeButton\").removeClass(\"selected\");\n         $(\"#black\").addClass(\"selected\");\n         type = \"black\";\n      });\n      $(\"#pixel\").click(function () {\n         $(\".typeButton\").removeClass(\"selected\");\n         $(\"#pixel\").addClass(\"selected\");\n         type = \"pixel\";\n      });\n      $(\"#overdrive\").click(function () {\n         $(\".typeButton\").removeClass(\"selected\");\n         $(\"#overdrive\").addClass(\"selected\");\n         type = \"overdrive\";\n      });\n\n      var shortlabels =\n         \"fface mface apite apitc ftite ftitc mtite mtitc bellye bellyc butte buttc fgene fgenc mgene mgenc anuse anusc feete feetc\".split(\n            \" \"\n         );\n\n      for (var shortlabel of shortlabels) {\n         var shortid = \"#\" + shortlabel;\n         $(shortid).click({ shortlabel: shortlabel }, function (event) {\n            $(this).toggleClass(\"selected\");\n            if (!$(this).hasClass(\"selected\")) {\n               var index = labels.indexOf(event.data.shortlabel);\n               if (index > -1) {\n                  labels.splice(index, 1);\n               }\n            } else {\n               labels.push(event.data.shortlabel);\n            }\n         });\n      }\n   });\n\n   function downloadImage() {\n      \/\/window.open(imagebloburl, '_blank');\n\n      var a = $(\"<a>\")\n         .attr(\"href\", imagebloburl)\n         .attr(\"download\", filename + filetype)\n         .appendTo(\"body\");\n\n      a[0].click();\n\n      a.remove();\n   }\n\n   $(\"#downloadbtn\").hover(\n      \/\/mousein\n      function () {\n         if (!document.getElementById(\"downloadbtn\").disabled) {\n            $(\"#overlay\").css({\n               opacity: \"0\",\n               transition: \"opacity \" + transitionspeed + \"ms ease-in-out\",\n            });\n            $(\"#particles-js\").css({\n               opacity: \"0.1\",\n               transition: \"opacity \" + transitionspeed + \"ms ease-in-out\",\n            });\n            $(\"#purify\").css({\n               opacity: \"0\",\n               transition: \"opacity \" + transitionspeed + \"ms ease-in-out\",\n            });\n            $(\"#submit\").css({\n               opacity: \"0\",\n               transition: \"opacity \" + transitionspeed + \"ms ease-in-out\",\n            });\n            $(\"#imageform\").css({\n               border: \"4px dashed rgba(255, 255, 255, .0)\",\n               transition: \" border \" + transitionspeed + \"ms ease-in-out\",\n            });\n            $(\"#header\").css({\n               opacity: \"0\",\n               transition: \"opacity \" + transitionspeed + \"ms ease-in-out\",\n            });\n            $(\"#imagetext\").css({\n               opacity: \"0\",\n               transition: \"opacity \" + transitionspeed + \"ms ease-in-out\",\n            });\n            $(\".labelButton\").css({\n               opacity: \"0\",\n               transition: \"opacity \" + transitionspeed + \"ms ease-in-out\",\n            });\n            $(\".typeButton\").css({\n               opacity: \"0\",\n               transition: \"opacity \" + transitionspeed + \"ms ease-in-out\",\n            });\n         }\n      },\n      \/\/mouseout\n      function () {\n         if (!document.getElementById(\"downloadbtn\").disabled) {\n            $(\"#overlay\").css({\n               opacity: \"0.4\",\n               transition: \"opacity \" + transitionspeed + \"ms ease-in-out\",\n            });\n            $(\"#particles-js\").css({\n               opacity: \"1\",\n               transition: \"opacity \" + transitionspeed + \"ms ease-in-out\",\n            });\n            $(\"#purify\").css({\n               opacity: \"1\",\n               transition: \"opacity \" + transitionspeed + \"ms ease-in-out\",\n            });\n            $(\"#submit\").css({\n               opacity: \"1\",\n               transition: \"opacity \" + transitionspeed + \"ms ease-in-out\",\n            });\n            $(\"#imageform\").css({\n               border: \"4px dashed rgba(255, 255, 255, 1)\",\n               transition: \" border \" + transitionspeed + \"ms ease-in-out\",\n            });\n\n            $(\"#header\").css({\n               opacity: \"1\",\n               transition: \"opacity \" + transitionspeed + \"ms ease-in-out\",\n            });\n            $(\"#imagetext\").css({\n               opacity: \"1\",\n               transition: \"opacity \" + transitionspeed + \"ms ease-in-out\",\n            });\n            $(\".labelButton\").css({\n               opacity: \"1\",\n               transition: \"opacity \" + transitionspeed + \"ms ease-in-out\",\n            });\n            $(\".typeButton\").css({\n               opacity: \"1\",\n               transition: \"opacity \" + transitionspeed + \"ms ease-in-out\",\n            });\n         }\n      }\n   );\n\n   function checkFile(bytes) {\n      let signatureArr = new Array(12);\n      for (let i = 0; i < 12; i++) {\n         signatureArr[i] = bytes[i].toString(16).padStart(2, \"0\");\n      }\n\n      let header = signatureArr.join(\"\");\n\n      console.log(`File header: ${header}`);\n\n      let type;\n      switch (header.slice(0, 8)) {\n         case \"89504e47\":\n            type = \"image\/png\";\n            return \"compatible\";\n         case \"52494646\":\n            type = \"image\/webp\";\n            return \"compatible\";\n         case \"ffd8ffe0\":\n         case \"ffd8ffe1\":\n         case \"ffd8ffe2\":\n         case \"ffd8ffe3\":\n         case \"ffd8ffdb\":\n         case \"ffd8ffee\":\n            type = \"image\/jpeg\";\n            return \"compatible\";\n         case \"1a45dfa3\":\n            type = \"video\/webm\";\n            return \"convertable\";\n      }\n\n      switch (header.slice(8, 24)) {\n         \/\/ ftypavif\n         case \"6674797061766966\": {\n            type = \"image\/avif\";\n            return \"convertable\";\n         }\n      }\n\n      if (header.startsWith(\"424d\")) {\n         type = \"image\/bmp\";\n         return \"convertable\";\n      }\n\n      return \"unknown\";\n   }\n\n   var selectedImage = null;\n\n   function toPng(file) {\n      \/\/ Convert the image to PNG\n      const reader = new FileReader();\n      return new Promise((resolve, reject) => {\n         reader.onload = function (event) {\n            let url = event.target.result;\n\n            const img = new Image();\n            img.onload = function () {\n               const canvas = document.createElement(\"canvas\");\n               canvas.width = img.width;\n               canvas.height = img.height;\n               const ctx = canvas.getContext(\"2d\");\n               ctx.drawImage(img, 0, 0);\n               canvas.toBlob(\n                  function (blob) {\n                     resolve({ blob });\n                  },\n                  \"image\/png\",\n                  1\n               );\n            };\n            img.onerror = function (error) {\n               reject({ error: \"Failed to load image\" });\n            };\n            img.src = url;\n         };\n         reader.readAsDataURL(file);\n      });\n   }\n\n   function onFileSelected(event) {\n      var file = event.target.files[0];\n\n      var reader = new FileReader();\n      reader.onload = function (event) {\n         let url = event.target.result;\n\n         var arrayBufferReader = new FileReader();\n         arrayBufferReader.onload = function (event) {\n            let bytes = new Uint8Array(event.target.result);\n            let result = checkFile(bytes);\n            switch (result) {\n               case \"compatible\": {\n                  console.log(\n                     `Loaded ${(file.size \/ 1000 \/ 1000).toFixed(3)} MB image`\n                  );\n\n                  if (file.size > 4 * 1024 * 1024) {\n                     alert(\n                        \"The selected image is too large, only images under 4MB are accepted.\"\n                     );\n                     return;\n                  }\n\n                  selectedImage = file;\n                  onSelectedImageAccepted(url);\n                  break;\n               }\n               case \"convertable\": {\n                  console.log(\"Converting image to PNG...\");\n\n                  toPng(file).then((result) => {\n                     console.log(\n                        `Loaded ${(result.blob.size \/ 1000 \/ 1000).toFixed(\n                           3\n                        )} MB image`\n                     );\n\n                     if (result.blob.size > 4 * 1024 * 1024) {\n                        alert(\n                           \"The selected image is too large after converting to a PNG, only images under 4MB are accepted.\"\n                        );\n                        return;\n                     }\n\n                     selectedImage = new File(\n                        [result.blob],\n                        file.name.replace(\/\\.[^.]*$\/, \"\") + \".png\",\n                        {\n                           type: \"image\/png\",\n                        }\n                     );\n                     onSelectedImageAccepted(\n                        URL.createObjectURL(selectedImage)\n                     );\n                  });\n                  break;\n               }\n               case \"unknown\": {\n                  console.log(\"Unknown image format\");\n                  alert(\n                     \"The format of the selected file is not recognized, only PNG, JPEG, BMP, AVIF, and WEBP images are supported.\"\n                  );\n                  break;\n               }\n            }\n         };\n         arrayBufferReader.readAsArrayBuffer(file);\n      };\n      reader.readAsDataURL(file);\n   }\n\n   function onSelectedImageAccepted(url) {\n      document.getElementById(\"imageform\").style.backgroundImage =\n         \"url(\" + url + \")\";\n      document.getElementById(\"overlay\").style.backgroundImage =\n         \"url(\" + url + \")\";\n      document.getElementById(\"purify\").disabled = false;\n      document.getElementById(\"submit\").disabled = false;\n      document.getElementById(\"downloadbtn\").disabled = true;\n   }\n\n   $(\"#submit\").on(\"click\", function (e) {\n      document.getElementById(\"loader\").style.display = \"block\";\n      document.getElementById(\"purify\").disabled = true;\n      document.getElementById(\"submit\").disabled = true;\n      document.getElementById(\"downloadbtn\").disabled = true;\n      $(\".typeButton\").prop(\"disabled\", true);\n      $(\".typeButton\").addClass(\"fullgray\");\n      $(\".labelButton\").prop(\"disabled\", true);\n      $(\".labelButton\").addClass(\"fullgray\");\n      $(\"#file\").prop(\"disabled\", true);\n      document.getElementById(\"imageform\").classList.add(\"mask\");\n\n      var formData = new FormData();\n      formData.append(\"file\", selectedImage);\n      console.log(\"Getting image detections...\");\n      e.preventDefault();\n      $.ajax({\n         type: \"POST\",\n         url: \"https:\/\/pury.fyi\/detect\",\n         data: formData,\n         contentType: false,\n         processData: false,\n         success: function (data) {\n            \/\/ POST was successful - do something with the response\n            alert(\"Server response: \" + data);\n            document.getElementById(\"loader\").style.display = \"none\";\n            document.getElementById(\"purify\").disabled = false;\n            document.getElementById(\"submit\").disabled = false;\n            $(\".typeButton\").prop(\"disabled\", false);\n            $(\".typeButton\").removeClass(\"fullgray\");\n            $(\".labelButton\").prop(\"disabled\", false);\n            $(\".labelButton\").removeClass(\"fullgray\");\n            $(\"#file\").prop(\"disabled\", false);\n            document.getElementById(\"imageform\").classList.remove(\"mask\");\n            if (opened) {\n               closeNav();\n               document.getElementById(\"patron\").classList.remove(\"glow\");\n            }\n         },\n         error: function (data) {\n            console.log(\"Request error: \" + data.statusText);\n\n            let parsedError;\n            switch (data.statusText) {\n               case \"Request Entity Too Large\": {\n                  parsedError = \"The uploaded image is too large.\";\n                  break;\n               }\n               default: {\n                  parsedError = \"Unknown error, please try again.\";\n                  break;\n               }\n            }\n\n            alert(data.parsedError);\n            document.getElementById(\"loader\").style.display = \"none\";\n            document.getElementById(\"purify\").disabled = false;\n            document.getElementById(\"submit\").disabled = false;\n            $(\".typeButton\").prop(\"disabled\", false);\n            $(\".typeButton\").removeClass(\"fullgray\");\n            $(\".labelButton\").prop(\"disabled\", false);\n            $(\".labelButton\").removeClass(\"fullgray\");\n            $(\"#file\").prop(\"disabled\", false);\n            document.getElementById(\"imageform\").classList.remove(\"mask\");\n         },\n      });\n   });\n\n   $(\"#purify\").on(\"click\", function (e) {\n      document.getElementById(\"loader\").style.display = \"block\";\n      document.getElementById(\"imageform\").classList.add(\"mask\");\n      document.getElementById(\"submit\").disabled = true;\n      document.getElementById(\"purify\").disabled = true;\n      document.getElementById(\"downloadbtn\").disabled = true;\n      $(\".typeButton\").prop(\"disabled\", true);\n      $(\".typeButton\").addClass(\"fullgray\");\n      $(\".labelButton\").prop(\"disabled\", true);\n      $(\".labelButton\").addClass(\"fullgray\");\n      $(\"#file\").prop(\"disabled\", true);\n      $(\"#file\").prop(\"disabled\", true);\n\n      var formData = new FormData();\n      formData.append(\"file\", selectedImage);\n      var imageName = selectedImage.name.replace(\/\\.[^.]*$\/, \"\");\n      console.log(\"Censoring image...\");\n      e.preventDefault();\n      paramtype = \"type=\" + type;\n      paramlabel = \"classes=\" + labels.join();\n      paramter = \"?\" + paramtype + \"&\" + paramlabel;\n      $.ajax({\n         type: \"POST\",\n         url: \"https:\/\/pury.fyi\/censor\" + paramter,\n         data: formData,\n         contentType: false,\n         processData: false,\n         \/\/dataType: \"text\/plain; charset=x-user-defined\",\n         xhrFields: { responseType: \"blob\" },\n         success: function (data) {\n            \/\/ don't set the MIME type to pdf or it will display\n            var blob = new Blob([data], {\n               type: data.type,\n            });\n            var bloburl = window.URL.createObjectURL(blob);\n            imagebloburl = bloburl;\n            filename = imageName;\n            filetype = data.type.replace(\"image\/\", \".\");\n\n            document.getElementById(\"imageform\").style.backgroundImage =\n               \"url(\" + bloburl + \")\";\n            document.getElementById(\"overlay\").style.backgroundImage =\n               \"url(\" + bloburl + \")\";\n            document.getElementById(\"loader\").style.display = \"none\";\n            document.getElementById(\"purify\").disabled = false;\n            document.getElementById(\"submit\").disabled = false;\n            document.getElementById(\"downloadbtn\").disabled = false;\n            $(\".typeButton\").prop(\"disabled\", false);\n            $(\".typeButton\").removeClass(\"fullgray\");\n            $(\".labelButton\").prop(\"disabled\", false);\n            $(\".labelButton\").removeClass(\"fullgray\");\n            $(\"#file\").prop(\"disabled\", false);\n            document.getElementById(\"imageform\").classList.remove(\"mask\");\n            if (opened) {\n               closeNav();\n               document.getElementById(\"patron\").classList.remove(\"glow\");\n            }\n         },\n         error: function (data) {\n            console.log(\"Request error: \" + data.statusText);\n\n            let parsedError;\n            switch (data.statusText) {\n               case \"Request Entity Too Large\": {\n                  parsedError = \"The uploaded image is too large.\";\n                  break;\n               }\n               default: {\n                  parsedError = \"Unknown error, please try again.\";\n                  break;\n               }\n            }\n\n            alert(data.parsedError);\n            document.getElementById(\"loader\").style.display = \"none\";\n            document.getElementById(\"purify\").disabled = false;\n            document.getElementById(\"submit\").disabled = false;\n            $(\".typeButton\").prop(\"disabled\", false);\n            $(\".typeButton\").removeClass(\"fullgray\");\n            $(\".labelButton\").prop(\"disabled\", false);\n            $(\".labelButton\").removeClass(\"fullgray\");\n            $(\"#file\").prop(\"disabled\", false);\n            document.getElementById(\"imageform\").classList.remove(\"mask\");\n         },\n      });\n   });\n<\/script>\n\n\n\n<p><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:25%\">\n<figure class=\"wp-block-image alignright size-full is-resized is-style-default\"><a href=\"https:\/\/pury.fi\/site\/support-us\"><img loading=\"lazy\" decoding=\"async\" width=\"450\" height=\"800\" src=\"https:\/\/pury.fi\/site\/wp-content\/uploads\/2025\/10\/support_us.png\" alt=\"\" class=\"wp-image-2424\" style=\"width:205px;height:auto\" srcset=\"https:\/\/pury.fi\/site\/wp-content\/uploads\/2025\/10\/support_us.png 450w, https:\/\/pury.fi\/site\/wp-content\/uploads\/2025\/10\/support_us-169x300.png 169w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/a><\/figure>\n<\/div>\n<\/div>\n<\/div><\/div><\/div><\/div><\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"pmpro_default_level":"","footnotes":""},"class_list":["post-350","page","type-page","status-publish","hentry","pmpro-has-access"],"blocksy_meta":{"page_title_panel":"","has_hero_section":"disabled","1fe444a30acb905569f4772fb1f007ef":"","hero_section":"type-1","hero_elements":[{"id":"custom_title","enabled":true,"heading_tag":"h1","title":"Home"},{"id":"custom_description","enabled":true,"description_visibility":{"desktop":true,"tablet":true,"mobile":false}},{"id":"custom_meta","enabled":true,"has_meta_avatar":"yes","single_meta_elements":{"author":false,"date":false,"categories":false,"comments":false,"updated":false,"tags":false},"page_meta_elements":{"joined":true,"articles_count":true,"comments":true}},{"id":"breadcrumbs","enabled":false}],"eae2a80b49fa5d94fe05e630a7c67cdc":"","hero_alignment1":"left","hero_alignment2":"center","hero_height":"230px","page_title_bg_type":"color","custom_hero_background":{"attachment_id":null},"parallax":{"desktop":false,"tablet":false,"mobile":false},"pageTitleFont":{"family":"Default","variation":"Default","size":{"desktop":"32px","tablet":"30px","mobile":"25px"},"line-height":"1.3","letter-spacing":"CT_CSS_SKIP_RULE","text-transform":"CT_CSS_SKIP_RULE","text-decoration":"CT_CSS_SKIP_RULE"},"pageTitleFontColor":{"default":{"color":"CT_CSS_SKIP_RULEDEFAULT"}},"pageMetaFont":{"family":"Default","variation":"n6","size":{"desktop":"12px","tablet":"12px","mobile":"12px"},"line-height":"1.3","letter-spacing":"CT_CSS_SKIP_RULE","text-transform":"uppercase","text-decoration":"CT_CSS_SKIP_RULE"},"pageMetaFontColor":{"default":{"color":"CT_CSS_SKIP_RULEDEFAULT"},"hover":{"color":"CT_CSS_SKIP_RULEDEFAULT"}},"pageExcerptFont":{"family":"Default","variation":"n5","size":"CT_CSS_SKIP_RULE","line-height":"CT_CSS_SKIP_RULE","letter-spacing":"CT_CSS_SKIP_RULE","text-transform":"CT_CSS_SKIP_RULE","text-decoration":"CT_CSS_SKIP_RULE"},"pageExcerptColor":{"default":{"color":"CT_CSS_SKIP_RULEDEFAULT"}},"breadcrumbsFont":{"family":"Default","variation":"n6","size":"12px","line-height":"CT_CSS_SKIP_RULE","letter-spacing":"CT_CSS_SKIP_RULE","text-transform":"uppercase","text-decoration":"CT_CSS_SKIP_RULE"},"breadcrumbsFontColor":{"default":{"color":"CT_CSS_SKIP_RULEDEFAULT"},"initial":{"color":"CT_CSS_SKIP_RULEDEFAULT"},"hover":{"color":"CT_CSS_SKIP_RULEDEFAULT"}},"pageTitleOverlay":{"default":{"color":"rgba(41, 51, 60, 0.2)"}},"pageTitleBackground":{"background_type":"color","background_pattern":"type-1","background_image":{"attachment_id":null,"x":0,"y":0},"background_repeat":"no-repeat","background_size":"auto","background_attachment":"scroll","patternColor":{"default":{"color":"#e5e7ea"}},"backgroundColor":{"default":{"color":"#EDEFF2"}}},"c25360755fdb72d7b1b40d955c9c9ff6":"","page_structure_type":"default","page_enable_vertical_spacing":"no","133db5885cde5f353a576d69570b5b43":"","disable_featured_image":"no","e40e0c06c5eef1625271b632a489e005":"","7259a82b6fd59a94f9175534f50258c4":"","hero_structure":"narrow","48d9a24e8d933a2ff9afbf52add61287":"","content_style":"inherit","vertical_spacing_source":"custom","content_area_spacing":"none","background":{"background_type":"color","background_pattern":"type-1","background_image":{"attachment_id":null,"x":0,"y":0},"background_repeat":"no-repeat","background_size":"auto","background_attachment":"scroll","patternColor":{"default":{"color":"#e5e7ea"}},"backgroundColor":{"default":{"color":"CT_CSS_SKIP_RULE"}}},"content_background":{"background_type":"color","background_pattern":"type-1","background_image":{"attachment_id":null,"x":0,"y":0},"background_repeat":"no-repeat","background_size":"auto","background_attachment":"scroll","patternColor":{"default":{"color":"#e5e7ea"}},"backgroundColor":{"default":{"color":"#ffffff"}}},"content_boxed_spacing":{"desktop":"40px","tablet":"35px","mobile":"20px"},"content_boxed_radius":{"top":"3px","bottom":"3px","left":"3px","right":"3px","linked":true},"content_boxed_shadow":{"blur":18,"spread":-6,"v_offset":12,"h_offset":0,"inset":false,"enable":true,"color":{"color":"rgba(34, 56, 101, 0.04)"}},"58ff0335e66bf47dbcf006a248521700":"","styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":6}},"_links":{"self":[{"href":"https:\/\/pury.fi\/site\/wp-json\/wp\/v2\/pages\/350","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pury.fi\/site\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/pury.fi\/site\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/pury.fi\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pury.fi\/site\/wp-json\/wp\/v2\/comments?post=350"}],"version-history":[{"count":67,"href":"https:\/\/pury.fi\/site\/wp-json\/wp\/v2\/pages\/350\/revisions"}],"predecessor-version":[{"id":2581,"href":"https:\/\/pury.fi\/site\/wp-json\/wp\/v2\/pages\/350\/revisions\/2581"}],"wp:attachment":[{"href":"https:\/\/pury.fi\/site\/wp-json\/wp\/v2\/media?parent=350"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}