{"id":3613,"date":"2022-10-07T19:49:22","date_gmt":"2022-10-07T14:49:22","guid":{"rendered":"https:\/\/www.edopedia.com\/blog\/?p=3613"},"modified":"2022-10-08T13:18:31","modified_gmt":"2022-10-08T08:18:31","slug":"how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript","status":"publish","type":"post","link":"https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/","title":{"rendered":"How to Make a Dynamic Image Editor With Effects in HTML5, CSS3 &#038; JavaScript"},"content":{"rendered":"\n<p>In this tutorial, I will teach you <strong>how to make an Image Editor<\/strong> Using JavaScript, HTML5, and CSS3. The complete source code of this <strong>JavaScript image editor<\/strong> is given below.<\/p>\n\n\n\n<p>I have also provided a download link at the end of this article through which you can download the full source code (including image files).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">JavaScript Image Editor Source Code<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">index.html<\/h3>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;htmlmixed&quot;,&quot;mime&quot;:&quot;text\/html&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;HTML&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;html&quot;}\">&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;\n  &lt;head&gt;\n    &lt;meta charset=&quot;utf-8&quot;&gt;\n    &lt;title&gt;Image Editor JavaScript&lt;\/title&gt;\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot;&gt;\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;https:\/\/unpkg.com\/boxicons@2.1.2\/css\/boxicons.min.css&quot;&gt;\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.1.1\/css\/all.min.css&quot;\/&gt;\n  &lt;\/head&gt;\n  &lt;body&gt;\n    &lt;div class=&quot;container disable&quot;&gt;\n        &lt;h2&gt;Easy Image Editor&lt;\/h2&gt;\n        &lt;div class=&quot;wrapper&quot;&gt;\n            &lt;div class=&quot;editor-panel&quot;&gt;\n                &lt;div class=&quot;filter&quot;&gt;\n                    &lt;label class=&quot;title&quot;&gt;Filters&lt;\/label&gt;\n                    &lt;div class=&quot;options&quot;&gt;\n                        &lt;button id=&quot;brightness&quot; class=&quot;active&quot;&gt;Brightness&lt;\/button&gt;\n                        &lt;button id=&quot;saturation&quot;&gt;Saturation&lt;\/button&gt;\n                        &lt;button id=&quot;inversion&quot;&gt;Inversion&lt;\/button&gt;\n                        &lt;button id=&quot;grayscale&quot;&gt;Grayscale&lt;\/button&gt;\n                    &lt;\/div&gt;\n                    &lt;div class=&quot;slider&quot;&gt;\n                        &lt;div class=&quot;filter-info&quot;&gt;\n                            &lt;p class=&quot;name&quot;&gt;Brighteness&lt;\/p&gt;\n                            &lt;p class=&quot;value&quot;&gt;100%&lt;\/p&gt;\n                        &lt;\/div&gt;\n                        &lt;input type=&quot;range&quot; value=&quot;100&quot; min=&quot;0&quot; max=&quot;200&quot;&gt;\n                    &lt;\/div&gt;\n                &lt;\/div&gt;\n                &lt;div class=&quot;rotate&quot;&gt;\n                    &lt;label class=&quot;title&quot;&gt;Rotate &amp; Flip&lt;\/label&gt;\n                    &lt;div class=&quot;options&quot;&gt;\n                        &lt;button id=&quot;left&quot;&gt;&lt;i class=&quot;fa-solid fa-rotate-left&quot;&gt;&lt;\/i&gt;&lt;\/button&gt;\n                        &lt;button id=&quot;right&quot;&gt;&lt;i class=&quot;fa-solid fa-rotate-right&quot;&gt;&lt;\/i&gt;&lt;\/button&gt;\n                        &lt;button id=&quot;horizontal&quot;&gt;&lt;i class='bx bx-reflect-vertical'&gt;&lt;\/i&gt;&lt;\/button&gt;\n                        &lt;button id=&quot;vertical&quot;&gt;&lt;i class='bx bx-reflect-horizontal' &gt;&lt;\/i&gt;&lt;\/button&gt;\n                    &lt;\/div&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n            &lt;div class=&quot;preview-img&quot;&gt;\n                &lt;img src=&quot;image-placeholder.svg&quot; alt=&quot;preview-img&quot;&gt;\n            &lt;\/div&gt;\n        &lt;\/div&gt;\n        &lt;div class=&quot;controls&quot;&gt;\n            &lt;button class=&quot;reset-filter&quot;&gt;Reset Filters&lt;\/button&gt;\n            &lt;div class=&quot;row&quot;&gt;\n                &lt;input type=&quot;file&quot; class=&quot;file-input&quot; accept=&quot;image\/*&quot; hidden&gt;\n                &lt;button class=&quot;choose-img&quot;&gt;Choose Image&lt;\/button&gt;\n                &lt;button class=&quot;save-img&quot;&gt;Save Image&lt;\/button&gt;\n            &lt;\/div&gt;\n        &lt;\/div&gt;\n    &lt;\/div&gt;\n\n    &lt;script src=&quot;script.js&quot;&gt;&lt;\/script&gt;\n    \n  &lt;\/body&gt;\n&lt;\/html&gt;<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">script.js<\/h3>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;javascript&quot;,&quot;mime&quot;:&quot;text\/javascript&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;JavaScript&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;js&quot;}\">const fileInput = document.querySelector(&quot;.file-input&quot;),\nfilterOptions = document.querySelectorAll(&quot;.filter button&quot;),\nfilterName = document.querySelector(&quot;.filter-info .name&quot;),\nfilterValue = document.querySelector(&quot;.filter-info .value&quot;),\nfilterSlider = document.querySelector(&quot;.slider input&quot;),\nrotateOptions = document.querySelectorAll(&quot;.rotate button&quot;),\npreviewImg = document.querySelector(&quot;.preview-img img&quot;),\nresetFilterBtn = document.querySelector(&quot;.reset-filter&quot;),\nchooseImgBtn = document.querySelector(&quot;.choose-img&quot;),\nsaveImgBtn = document.querySelector(&quot;.save-img&quot;);\n\nlet brightness = &quot;100&quot;, saturation = &quot;100&quot;, inversion = &quot;0&quot;, grayscale = &quot;0&quot;;\nlet rotate = 0, flipHorizontal = 1, flipVertical = 1;\n\nconst loadImage = () =&gt; {\n    let file = fileInput.files[0];\n    if(!file) return;\n    previewImg.src = URL.createObjectURL(file);\n    previewImg.addEventListener(&quot;load&quot;, () =&gt; {\n        resetFilterBtn.click();\n        document.querySelector(&quot;.container&quot;).classList.remove(&quot;disable&quot;);\n    });\n}\n\nconst applyFilter = () =&gt; {\n    previewImg.style.transform = `rotate(${rotate}deg) scale(${flipHorizontal}, ${flipVertical})`;\n    previewImg.style.filter = `brightness(${brightness}%) saturate(${saturation}%) invert(${inversion}%) grayscale(${grayscale}%)`;\n}\n\nfilterOptions.forEach(option =&gt; {\n    option.addEventListener(&quot;click&quot;, () =&gt; {\n        document.querySelector(&quot;.active&quot;).classList.remove(&quot;active&quot;);\n        option.classList.add(&quot;active&quot;);\n        filterName.innerText = option.innerText;\n\n        if(option.id === &quot;brightness&quot;) {\n            filterSlider.max = &quot;200&quot;;\n            filterSlider.value = brightness;\n            filterValue.innerText = `${brightness}%`;\n        } else if(option.id === &quot;saturation&quot;) {\n            filterSlider.max = &quot;200&quot;;\n            filterSlider.value = saturation;\n            filterValue.innerText = `${saturation}%`\n        } else if(option.id === &quot;inversion&quot;) {\n            filterSlider.max = &quot;100&quot;;\n            filterSlider.value = inversion;\n            filterValue.innerText = `${inversion}%`;\n        } else {\n            filterSlider.max = &quot;100&quot;;\n            filterSlider.value = grayscale;\n            filterValue.innerText = `${grayscale}%`;\n        }\n    });\n});\n\nconst updateFilter = () =&gt; {\n    filterValue.innerText = `${filterSlider.value}%`;\n    const selectedFilter = document.querySelector(&quot;.filter .active&quot;);\n\n    if(selectedFilter.id === &quot;brightness&quot;) {\n        brightness = filterSlider.value;\n    } else if(selectedFilter.id === &quot;saturation&quot;) {\n        saturation = filterSlider.value;\n    } else if(selectedFilter.id === &quot;inversion&quot;) {\n        inversion = filterSlider.value;\n    } else {\n        grayscale = filterSlider.value;\n    }\n    applyFilter();\n}\n\nrotateOptions.forEach(option =&gt; {\n    option.addEventListener(&quot;click&quot;, () =&gt; {\n        if(option.id === &quot;left&quot;) {\n            rotate -= 90;\n        } else if(option.id === &quot;right&quot;) {\n            rotate += 90;\n        } else if(option.id === &quot;horizontal&quot;) {\n            flipHorizontal = flipHorizontal === 1 ? -1 : 1;\n        } else {\n            flipVertical = flipVertical === 1 ? -1 : 1;\n        }\n        applyFilter();\n    });\n});\n\nconst resetFilter = () =&gt; {\n    brightness = &quot;100&quot;; saturation = &quot;100&quot;; inversion = &quot;0&quot;; grayscale = &quot;0&quot;;\n    rotate = 0; flipHorizontal = 1; flipVertical = 1;\n    filterOptions[0].click();\n    applyFilter();\n}\n\nconst saveImage = () =&gt; {\n    const canvas = document.createElement(&quot;canvas&quot;);\n    const ctx = canvas.getContext(&quot;2d&quot;);\n    canvas.width = previewImg.naturalWidth;\n    canvas.height = previewImg.naturalHeight;\n    \n    ctx.filter = `brightness(${brightness}%) saturate(${saturation}%) invert(${inversion}%) grayscale(${grayscale}%)`;\n    ctx.translate(canvas.width \/ 2, canvas.height \/ 2);\n    if(rotate !== 0) {\n        ctx.rotate(rotate * Math.PI \/ 180);\n    }\n    ctx.scale(flipHorizontal, flipVertical);\n    ctx.drawImage(previewImg, -canvas.width \/ 2, -canvas.height \/ 2, canvas.width, canvas.height);\n    \n    const link = document.createElement(&quot;a&quot;);\n    link.download = &quot;image.jpg&quot;;\n    link.href = canvas.toDataURL();\n    link.click();\n}\n\nfilterSlider.addEventListener(&quot;input&quot;, updateFilter);\nresetFilterBtn.addEventListener(&quot;click&quot;, resetFilter);\nsaveImgBtn.addEventListener(&quot;click&quot;, saveImage);\nfileInput.addEventListener(&quot;change&quot;, loadImage);\nchooseImgBtn.addEventListener(&quot;click&quot;, () =&gt; fileInput.click());<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">style.css<\/h3>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;css&quot;,&quot;mime&quot;:&quot;text\/css&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;CSS&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;css&quot;}\">\/* Import Google font - Poppins *\/\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@400;500;600&amp;display=swap');\n*{\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n  font-family: 'Poppins', sans-serif;\n}\nbody{\n  display: flex;\n  padding: 10px;\n  min-height: 100vh;\n  align-items: center;\n  justify-content: center;\n  background: #E3F2FD;\n}\n.container{\n  width: 850px;\n  padding: 30px 35px 35px;\n  background: #fff;\n  border-radius: 10px;\n  box-shadow: 0 10px 20px rgba(0,0,0,0.1);\n}\n.container.disable .editor-panel,\n.container.disable .controls .reset-filter,\n.container.disable .controls .save-img{\n  opacity: 0.5;\n  pointer-events: none;\n}\n.container h2{\n  margin-top: -8px;\n  font-size: 22px;\n  font-weight: 500;\n}\n.container .wrapper{\n  display: flex;\n  margin: 20px 0;\n  min-height: 335px;\n}\n.wrapper .editor-panel{\n  padding: 15px 20px;\n  width: 280px;\n  border-radius: 5px;\n  border: 1px solid #ccc;\n}\n.editor-panel .title{\n  display: block;\n  font-size: 16px;\n  margin-bottom: 12px;\n}\n.editor-panel .options, .controls{\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: space-between;\n}\n.editor-panel button{\n  outline: none;\n  height: 40px;\n  font-size: 14px;\n  color: #6C757D;\n  background: #fff;\n  border-radius: 3px;\n  margin-bottom: 8px;\n  border: 1px solid #aaa;\n}\n.editor-panel .filter button{\n  width: calc(100% \/ 2 - 4px);\n}\n.editor-panel button:hover{\n  background: #f5f5f5;\n}\n.filter button.active{\n  color: #fff;\n  border-color: #5372F0;\n  background: #5372F0;\n}\n.filter .slider{\n  margin-top: 12px;\n}\n.filter .slider .filter-info{\n  display: flex;\n  color: #464646;\n  font-size: 14px;\n  justify-content: space-between;\n}\n.filter .slider input{\n  width: 100%;\n  height: 5px;\n  accent-color: #5372F0;\n}\n.editor-panel .rotate{\n  margin-top: 17px;\n}\n.editor-panel .rotate button{\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: calc(100% \/ 4 - 3px);\n}\n.rotate .options button:nth-child(3),\n.rotate .options button:nth-child(4){\n  font-size: 18px;\n}\n.rotate .options button:active{\n  color: #fff;\n  background: #5372F0;\n  border-color: #5372F0;\n}\n.wrapper .preview-img{\n  flex-grow: 1;\n  display: flex;\n  overflow: hidden;\n  margin-left: 20px;\n  border-radius: 5px;\n  align-items: center;\n  justify-content: center;\n}\n.preview-img img{\n  max-width: 490px;\n  max-height: 335px;\n  width: 100%;\n  height: 100%;\n  object-fit: contain;\n}\n.controls button{\n  padding: 11px 20px;\n  font-size: 14px;\n  border-radius: 3px;\n  outline: none;\n  color: #fff;\n  cursor: pointer;\n  background: none;\n  transition: all 0.3s ease;\n  text-transform: uppercase;\n}\n.controls .reset-filter{\n  color: #6C757D;\n  border: 1px solid #6C757D;\n}\n.controls .reset-filter:hover{\n  color: #fff;\n  background: #6C757D;\n}\n.controls .choose-img{\n  background: #6C757D;\n  border: 1px solid #6C757D;\n}\n.controls .save-img{\n  margin-left: 5px;\n  background: #5372F0;\n  border: 1px solid #5372F0;\n}\n\n@media screen and (max-width: 760px) {\n  .container{\n    padding: 25px;\n  }\n  .container .wrapper{\n    flex-wrap: wrap-reverse;\n  }\n  .wrapper .editor-panel{\n    width: 100%;\n  }\n  .wrapper .preview-img{\n    width: 100%;\n    margin: 0 0 15px;\n  }\n}\n\n@media screen and (max-width: 500px) {\n  .controls button{\n    width: 100%;\n    margin-bottom: 10px;\n  }\n  .controls .row{\n    width: 100%;\n  }\n  .controls .row .save-img{\n    margin-left: 0px;\n  }\n}<\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Project Screenshots<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"469\" src=\"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/10\/scrnli_10_7_2022_7-14-49-PM-1024x469.png\" alt=\"JavaScript Image Editor - Choose Image\" class=\"wp-image-3617\" srcset=\"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/10\/scrnli_10_7_2022_7-14-49-PM-1024x469.png 1024w, https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/10\/scrnli_10_7_2022_7-14-49-PM-300x137.png 300w, https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/10\/scrnli_10_7_2022_7-14-49-PM-768x351.png 768w, https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/10\/scrnli_10_7_2022_7-14-49-PM.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>JavaScript Image Editor &#8211; Choose Image<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"469\" src=\"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/10\/scrnli_10_7_2022_7-17-16-PM-1024x469.png\" alt=\"JavaScript Image Editor - Filters (brightness, saturation, inversion, grayscale), Rotate &amp; Flip\" class=\"wp-image-3618\" srcset=\"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/10\/scrnli_10_7_2022_7-17-16-PM-1024x469.png 1024w, https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/10\/scrnli_10_7_2022_7-17-16-PM-300x137.png 300w, https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/10\/scrnli_10_7_2022_7-17-16-PM-768x351.png 768w, https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/10\/scrnli_10_7_2022_7-17-16-PM.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>JavaScript Image Editor &#8211; Filters (brightness, saturation, inversion, grayscale), Rotate &amp; Flip<\/figcaption><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Download Full Source Code (including images)<\/h2>\n\n\n<p><a class=\"ep_link_major\" href=\"https:\/\/edopedia.com\/assets\/downloads\/static\/javascript_image_editor.zip\" target=\"_blank\" rel=\"noopener\" download=\"\">Download<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>In this tutorial, I will teach you how to make an Image Editor Using JavaScript, HTML5, and CSS3. The complete source code of this JavaScript image editor is given below. I have also provided a download link at the end of this article through which you can download the full source code (including image files). &#8230; <a title=\"How to Make a Dynamic Image Editor With Effects in HTML5, CSS3 &#038; JavaScript\" class=\"read-more\" href=\"https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/\" aria-label=\"Read more about How to Make a Dynamic Image Editor With Effects in HTML5, CSS3 &#038; JavaScript\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":3615,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[112],"tags":[],"class_list":["post-3613","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Make a Dynamic Image Editor With Effects in HTML5, CSS3 &amp; JavaScript<\/title>\n<meta name=\"description\" content=\"In this tutorial, I will teach you how to make an Image Editor Using JavaScript, HTML5, and CSS3. The complete source code of this JavaScript image editor\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Make a Dynamic Image Editor With Effects in HTML5, CSS3 &amp; JavaScript\" \/>\n<meta property=\"og:description\" content=\"In this tutorial, I will teach you how to make an Image Editor Using JavaScript, HTML5, and CSS3. The complete source code of this JavaScript image editor\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/\" \/>\n<meta property=\"og:site_name\" content=\"Edopedia\" \/>\n<meta property=\"article:author\" content=\"trulyfurqan\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-07T14:49:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-10-08T08:18:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/10\/JavaScript_Image_Editor.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"880\" \/>\n\t<meta property=\"og:image:height\" content=\"495\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Furqan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Furqan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Make a Dynamic Image Editor With Effects in HTML5, CSS3 & JavaScript","description":"In this tutorial, I will teach you how to make an Image Editor Using JavaScript, HTML5, and CSS3. The complete source code of this JavaScript image editor","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/","og_locale":"en_US","og_type":"article","og_title":"How to Make a Dynamic Image Editor With Effects in HTML5, CSS3 & JavaScript","og_description":"In this tutorial, I will teach you how to make an Image Editor Using JavaScript, HTML5, and CSS3. The complete source code of this JavaScript image editor","og_url":"https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/","og_site_name":"Edopedia","article_author":"trulyfurqan","article_published_time":"2022-10-07T14:49:22+00:00","article_modified_time":"2022-10-08T08:18:31+00:00","og_image":[{"width":880,"height":495,"url":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/10\/JavaScript_Image_Editor.jpg","type":"image\/jpeg"}],"author":"Furqan","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Furqan","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/#article","isPartOf":{"@id":"https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/"},"author":{"name":"Furqan","@id":"https:\/\/www.edopedia.com\/blog\/#\/schema\/person\/3951cb19e3aa56df09e408c98aa02339"},"headline":"How to Make a Dynamic Image Editor With Effects in HTML5, CSS3 &#038; JavaScript","datePublished":"2022-10-07T14:49:22+00:00","dateModified":"2022-10-08T08:18:31+00:00","mainEntityOfPage":{"@id":"https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/"},"wordCount":106,"commentCount":0,"publisher":{"@id":"https:\/\/www.edopedia.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/#primaryimage"},"thumbnailUrl":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/10\/JavaScript_Image_Editor.jpg","articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/","url":"https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/","name":"How to Make a Dynamic Image Editor With Effects in HTML5, CSS3 & JavaScript","isPartOf":{"@id":"https:\/\/www.edopedia.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/#primaryimage"},"image":{"@id":"https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/#primaryimage"},"thumbnailUrl":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/10\/JavaScript_Image_Editor.jpg","datePublished":"2022-10-07T14:49:22+00:00","dateModified":"2022-10-08T08:18:31+00:00","description":"In this tutorial, I will teach you how to make an Image Editor Using JavaScript, HTML5, and CSS3. The complete source code of this JavaScript image editor","breadcrumb":{"@id":"https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/#primaryimage","url":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/10\/JavaScript_Image_Editor.jpg","contentUrl":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2022\/10\/JavaScript_Image_Editor.jpg","width":880,"height":495,"caption":"Dynamic Image Editor With Effects in HTML5, CSS3 & JavaScript"},{"@type":"BreadcrumbList","@id":"https:\/\/www.edopedia.com\/blog\/how-to-make-a-dynamic-image-editor-with-effects-in-html5-css3-javascript\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.edopedia.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Make a Dynamic Image Editor With Effects in HTML5, CSS3 &#038; JavaScript"}]},{"@type":"WebSite","@id":"https:\/\/www.edopedia.com\/blog\/#website","url":"https:\/\/www.edopedia.com\/blog\/","name":"Edopedia","description":"Coding\/Programming Blog","publisher":{"@id":"https:\/\/www.edopedia.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.edopedia.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.edopedia.com\/blog\/#organization","name":"Edopedia","url":"https:\/\/www.edopedia.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.edopedia.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2017\/10\/edopedia_icon_text_10.jpg","contentUrl":"https:\/\/www.edopedia.com\/blog\/wp-content\/uploads\/2017\/10\/edopedia_icon_text_10.jpg","width":400,"height":100,"caption":"Edopedia"},"image":{"@id":"https:\/\/www.edopedia.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.edopedia.com\/blog\/#\/schema\/person\/3951cb19e3aa56df09e408c98aa02339","name":"Furqan","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.edopedia.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e5e68aef3ad8f0b83d56f4953c512c8e57bd2e6dc64daec33b5d0495d9058f51?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e5e68aef3ad8f0b83d56f4953c512c8e57bd2e6dc64daec33b5d0495d9058f51?s=96&d=mm&r=g","caption":"Furqan"},"description":"Well. I've been working for the past three years as a web designer and developer. I have successfully created websites for small to medium sized companies as part of my freelance career. During that time I've also completed my bachelor's in Information Technology.","sameAs":["http:\/\/www.edopedia.com\/blog\/","trulyfurqan"],"url":"https:\/\/www.edopedia.com\/blog\/author\/furqan\/"}]}},"_links":{"self":[{"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/posts\/3613","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/comments?post=3613"}],"version-history":[{"count":5,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/posts\/3613\/revisions"}],"predecessor-version":[{"id":3698,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/posts\/3613\/revisions\/3698"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/media\/3615"}],"wp:attachment":[{"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/media?parent=3613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/categories?post=3613"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.edopedia.com\/blog\/wp-json\/wp\/v2\/tags?post=3613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}