{"id":2708,"date":"2011-04-12T23:16:31","date_gmt":"2011-04-13T03:16:31","guid":{"rendered":"http:\/\/www.theartofretouching.com\/blog\/photoshop-tutorial-spot-channels"},"modified":"2024-04-10T22:20:07","modified_gmt":"2024-04-11T05:20:07","slug":"photoshop-tutorial-spot-channels","status":"publish","type":"post","link":"https:\/\/www.theartofretouching.com\/blog\/photoshop-tutorial-spot-channels\/","title":{"rendered":"Spot Channels | Photoshop Advanced Tutorial"},"content":{"rendered":"<h2><span style=\"font-weight: bold;\">Photoshop Tutorial &#8211; Spot Channels for PrePress and Printing<\/span><\/h2>\n<p><em>This video is available <strong>Free for Everyone<\/strong>.<\/em><br \/>\n<em><strong>Running Time<\/strong>: 8 minutes<\/em><\/p>\n<p>This Adobe Photoshop tutorial video will introduce <strong>Spot Channels. <\/strong>This is the third of four videos about working with channels. We will explain what Spot Channels are, and how they differ from regular Color Channels. Before you watch this video, we recommend you watch the previous Adobe Photoshop tutorial about <a href=\"https:\/\/www.theartofretouching.com\/blog\/photoshop-tutorial-color-channels\" target=\"_self\" rel=\"noopener\"><strong>Color Channels<\/strong><\/a> and <a href=\"https:\/\/www.theartofretouching.com\/blog\/photoshop-tutorial-alpha-channels\" target=\"_self\" rel=\"noopener\"><strong>Alpha Channels<\/strong><\/a>, and you can then follow this one with the <a href=\"https:\/\/www.theartofretouching.com\/blog\/photoshop-tutorial-channel-mixer\" target=\"_self\" rel=\"noopener\"><strong>Channel Mixer<\/strong><\/a>.<\/p>\n<p>Spot colors are intended to be used with CMYK for printing. These will allow you to add extra colors for press such as PMS, create &ldquo;bump plates&rdquo;, or for detailed varnishes. <span id=\"more-292\"> <\/span>The can be used to add a 5th color to a CMYK print run, or limit the image to a two color duotone image. Used with Quark Express or Adobe inDesign, either of the programs just mentioned can select, and print, the Spot Channel that was created in Photoshop.<\/p>\n<p><!--more--><\/p>\n<div style=\"position: relative; top: 10px;\">\n\r\n\r\n<style>\r\n    \r\n\/* FOLLOWING TWO SHOULD HAVE SAME COLOR - videoControlBarColor *\/\r\n\/* Background color of control bar and big play button *\/\r\n#video1 .vjs-big-play-button {\r\n    border-color: #efefef  !important;\r\n    background-color: #333333 !important;\r\n    font-size: 20px !important;\r\n    opacity: .7;\r\n     }\r\n    \r\n    \r\n\r\n\/* Color of control bar *\/\r\n#videocontent1 .vjs-control-bar button {\r\n    background: unset !important;\r\n}    \r\n\r\n\r\n#videocontent1 .vjs-matrix .vjs-control-bar {\r\n    background: #333333 !important;\r\n    opacity: 1.0 !important;\r\n} \r\n\r\n\/* FOLLOWING TWO SHOULD HAVE SAME COLOR - videoMainColor *\/\r\n\/* Color of all text, icons and \"play\" triangle *\/\r\n#videocontent1 .vjs-default-skin {\r\n    color: #efefef !important; \r\n    overflow: hidden !important;\r\n            font-size: 10px !important;\r\n    }\r\n    \r\n\/* Change the color of various \"bars\" text: Scrubber and Volume - make it same as bg color of big play button*\/\r\n#videocontent1 .vjs-matrix .vjs-volume-level,\r\n#videocontent1 .vjs-matrix .vjs-play-progress,\r\n#videocontent1 .vjs-matrix .vjs-slider-bar\r\n{\r\n    background: #efefef !important;\r\n}\r\n    \r\ndiv#videocontent1 {\r\n    display: block !important;\r\n}    \r\n\r\n    \r\n                    \r\n\r\n\r\n\/* Style inner div to center button *\/\r\n.inner {\r\n    left: 50%;\r\n    top: 10%;\r\n    transform: translate(-50%, -50%);\r\n    position: absolute;\r\n}    \r\n    \r\n    \r\n\r\n        \/* hide the captions settings item from the captions menu *\/\r\n        .video1.vjs-texttrack-settings {\r\n            display: none;\r\n        }\r\n        \r\n    #videocontent1 .vjs-menu-button-popup .vjs-menu .vjs-menu-content {\r\n        background-color: #333333 !important;\r\n        color: #efefef !important;\r\n        padding: 0px !important;\r\n        margin: 0px !important;\r\n        max-height: none !important;\r\n    }\r\n    \r\n    #videocontent1 .vjs-menu-content li {\r\n        list-style: none !important;\r\n    }\r\n    \r\n    #videocontent1 li.vjs-menu-item {\r\n        margin-bottom: 0px !important;\r\n        margin: 0px !important;\r\n    }\r\n    \r\n    #videocontent1 .vjs-control .vjs-button {\r\n        padding-left: 0px !important;\r\n        padding-right: 0px !important;\r\n        margin-left: 0px !important;\r\n        padding:0px !important;\r\n    }\r\n    \r\n    #videocontent1 .vjs-playback-rate-value {\r\n        margin-right: 0em;\r\n    }\r\n    \r\n    #videocontent1 .vjs-playback-rate {\r\n        margin-right: 0em;\r\n    }\r\n        \r\n\r\n    \r\n#videocontent1 .vjs-user-inactive .vjs-control-bar {\r\n    display: none !important;\r\n    visibility: hidden !important;\r\n    opacity: 0 !important;\r\n    cursor: none !important;\r\n}\r\n    \r\n\/**\r\n#videocontent1 .vjs-big-play-button {\r\n    border: 0px !important;\r\n}\r\n*\/\r\n    \r\n#videocontent1 .vjs-play-control {\r\n    border: 0px !important;\r\n}\r\n    \r\n#videocontent1 .vjs-mute-control {\r\n    border: 0px !important;\r\n}\r\n\r\n#videocontent1 .vjs-control {\r\n    border: 0px !important;\r\n}\r\n\r\n#videocontent1 .vjs-button {\r\n    padding: 0px !important;\r\n    border: 0px !important;\r\n}    \r\n    \r\n#videocontent1 .vjs-picture-in-picture-control {\r\n    display: none !important;\r\n    visibility: hidden !important;\r\n    opacity: 0 !important;\r\n    cursor: none !important;\r\n}\r\n    \r\n    \r\n\r\n.video-js-dimensions.vjs-fluid { \r\n    padding-top: 56.25%;\r\n }\r\n.video-js { padding-top: 56.25%; }\r\n    \r\n    \r\n    \r\n<\/style>\r\n\r\n<script>\r\n\r\n    var watermarkCounter = 1;\r\n    \r\n    function setCookie(name, value, daysToExpire) {\r\n        \/\/console.log(\"setCookie\");\r\n        var expires = \"\";\r\n        if (daysToExpire) {\r\n            var date = new Date();\r\n            date.setTime(date.getTime() + (daysToExpire * 24 * 60 * 60 * 1000));\r\n            expires = \"; expires=\" + date.toUTCString();\r\n        }\r\n        document.cookie = name + \"=\" + value + expires + \"; path=\/\";\r\n    }\r\n    \r\n    function getCookie(cookieName) {\r\n        const cookies = document.cookie.split(';');\r\n\r\n        for (const cookie of cookies) {\r\n            const [name, value] = cookie.trim().split('=');\r\n            if (name === cookieName) {\r\n                return decodeURIComponent(value);\r\n            }\r\n        }\r\n\r\n        return null; \/\/ Cookie not found\r\n    }\r\n\r\n<\/script>\r\n\r\n\r\n        <!-- <link href=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/plugins\/S3MediaVaultPro\/includes\/css\/video-js-2.min.css\" rel=\"stylesheet\"> -->\r\n        <link href=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/plugins\/S3MediaVaultPro\/includes\/css\/videojs.watermark.css\" rel=\"stylesheet\">\r\n        \r\n        <!-- <script src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/plugins\/S3MediaVaultPro\/includes\/javascript\/video-2.js\"><\/script> -->\r\n        <script src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/plugins\/S3MediaVaultPro\/includes\/javascript\/videojs.watermark.js\"><\/script>\r\n        \r\n        <div id=\"videoparent1\">\r\n            <div id=\"videocontent1\" class=\"video-wrap\">\r\n                                    <video N id=\"video1\"  oncontextmenu=\"return false;\" class=\"vjs-matrix video-js-responsive-container video-js  vjs-16-9  vjs-default-skin vjs-big-play-centered\"  controls  preload=\"metadata\"  width=\"800\" height=\"450\"   poster=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2011\/04\/spot_channels-1.jpg\"  data-setup='{\"fluid\": true   ,\"playbackRates\": [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]  }' playsinline>\r\n                        <source src=\"https:\/\/aor-public.s3.amazonaws.com\/Basic_1\/9-Color_Correction\/videos\/spot_channels_1280.mp4?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIATFRWUZAOT3CJXS7C%2F20260915%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260915T115356Z&X-Amz-SignedHeaders=host&X-Amz-Expires=1000&X-Amz-Signature=93eaf7fee3c4c310f4e4346ad4f8da60ba4cfa2cc3bc78c7f75a3eca532f31e8\" type=\"video\/mp4\" \/>\r\n                                            <\/video>\r\n                                                 <\/div>\r\n    <\/div>\r\n\r\n        \r\n                \r\n        <style>\r\n    \r\n    .vjs-fullscreen { padding-top: 0px }\r\n\r\n        \r\n    .buttonClass {\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        vertical-align: baseline;\r\n        padding: 0px;\r\n    }\r\n\r\n                div1.vjs-watermark {\r\n                bottom: 30px !important;\r\n                top: unset !important;\r\n                right: 0 !important;\r\n                left: unset !important;\r\n            }\r\n         \r\n<\/style>\r\n\r\n<!-- JavaScript Start -->\r\n<script>\r\n    \r\n\/* <![CDATA[ *\/\r\nvar threshold1;\r\nvar ajaxurl = \"https:\/\/www.theartofretouching.com\/blog\/wp-admin\/admin-ajax.php\";\r\nvar promise;\r\n\r\nvar player1 = videojs('video1',{\r\n  width: \"800\",\r\n  height: \"450\"\r\n});\r\n\t\r\nplayer1.bigPlayButton.on('click', function(){\r\n\tif (player1.paused()) {\r\n\t\tplayer1.play();\r\n\t} \r\n\t\t\r\n});\r\n    \r\nvar div1;\r\n\r\n\r\n\r\nvar hasBeenClosed = false;\r\n       \r\n        function closePIP() {\r\n            var $videoWrap = jQuery('.video-wrap');\r\n            var $video = jQuery('.video');\r\n            var $closeButton = jQuery('.closeButton')\r\n\r\n            $videoWrap.height('auto');\r\n            $video.removeClass('stuck');\r\n            $closeButton.removeClass('closeShowing');\r\n            $closeButton.addClass('closeHidden');\r\n\r\n            hasBeenClosed = true;\r\n            player1.pause();\r\n            videojs('video1', { inactivityTimeout: 0 });\r\n            player1.bigPlayButton.show();\r\n\r\n        }\r\n    \r\njQuery(document).ready(function($) {\r\n    \r\n    jQuery(\"#closeButton\").hide();\r\n    var $window = jQuery(window);\r\n    var $videoWrap = jQuery('.video-wrap');\r\n    var $video = jQuery('.video');\r\n    var videoHeight = $video.outerHeight();\r\n    var $closeButton = jQuery('.closeButton')\r\n\r\n    $window.on('scroll',  function() {\r\n        var windowScrollTop = $window.scrollTop();\r\n        var videoBottom = videoHeight + $videoWrap.offset().top;\r\n\r\n        if ( (windowScrollTop > videoBottom) && !hasBeenClosed ) {\r\n            $videoWrap.height(videoHeight);\r\n            $video.addClass('stuck');\r\n            \/\/$closeButton.removeClass('closeHidden');\r\n            \/\/$closeButton.removeClass('closeHidden');\r\n            \/\/$closeButton.addClass('closeShowing');\r\n            \/\/$closeButton.display('block');                            \r\n            jQuery(\"#closeButton\").show();\r\n        } else {\r\n            $videoWrap.height('auto');\r\n            $video.removeClass('stuck');\r\n            jQuery(\"#closeButton\").hide();\r\n        }\r\n\r\n        \/\/console.log(\"videoHeight: \" + videoHeight + \", windowScrollTop: \" + windowScrollTop + \", videoBottom: \" + videoBottom);\r\n\r\n    });\r\n\r\n\/\/hideWatermarkOnLoad1();\r\n    \/\/alert(jQuery(window).width() + \", \" + jQuery(window).height());\r\n    div = document.getElementsByClassName(\"vjs-watermark\")[1-1];\r\n    if (div) {\r\n        \/\/div.style.display = \"none\";\r\n    }\r\n\r\n        \r\n        if(jQuery(window).width() >= 500) {\r\n            var skipBehindButton1 = player1.controlBar.addChild(\"button\", {}, 2);\r\n            var skipBehindButtonDom1 = skipBehindButton1.el();\r\n            skipBehindButtonDom1.innerHTML = \"<<\";\r\n            skipBehindButtonDom1.title = \"Rewind 15 Seconds\";\r\n            skipBehindButton1.addClass(\"buttonClass\");\r\n            skipBehindButtonDom1.onclick = function(){\r\n                skipS3MV1(-15);\r\n            }  \r\n\r\n            var skipAheadButton1 = player1.controlBar.addChild(\"button\", {}, 3);\r\n            var skipAheadButtonDom1 = skipAheadButton1.el();\r\n            skipAheadButtonDom1.innerHTML = \">>\";\r\n            skipAheadButtonDom1.title = \"Fast-Forward 15 Seconds\";\r\n            skipAheadButton1.addClass(\"buttonClass\");\r\n            skipAheadButtonDom1.onclick = function() {\r\n                skipS3MV1(15);\r\n            }  \r\n        }\r\n    \r\n        \r\n}); \/\/End jQuery(document).ready\r\n    \r\n\r\nfunction skipS3MV1(skipBy) {\r\n    player1.currentTime(player1.currentTime() + skipBy);\r\n}\r\n\r\n\r\nfunction getDomainName(hostName) {\r\n    return hostName.substring(hostName.lastIndexOf(\".\", hostName.lastIndexOf(\".\") - 1) + 1);\r\n}\r\n\r\n    \r\nfunction unmuteAndPlayFromStart2() {\r\n    var player1;\r\n    if(player1 == null) {\r\n        player1 = videojs(\"video1\");\r\n    }\r\n\r\n    if( (player1.muted()) && (timesMuted == 1) ) {\r\n        player1.watermark({\r\n          file: '',\r\n          xpos: 1,\r\n          ypos: 0,\r\n          xrepeat: 0,\r\n          opacity: 0,\r\n          url: '',\r\n          clickable: false,\r\n          text: false,\r\n          textContent: '',\r\n          fontSize: 0,\r\n          fontColor: '',\r\n          fontBGColor: ''\r\n        });    \r\n\r\n                player1.currentTime(0);\r\n        player1.muted(false);\r\n        player1.play();\r\n    }\r\n    timesMuted++;\r\n}\r\n\r\n\r\nfunction unmuteAndPlayFromStart1(player1) {\r\n    \/\/var player1;\r\n    if(player1 == null) {\r\n        player1 = videojs(\"video1\");\r\n    }\r\n    \/\/alert(timesMuted);\r\n        player1.currentTime(0);\r\n    player1.muted(false);\r\n    player1.play();\r\n}\r\n\r\n    \r\nfunction roundUpToAny(n,x=15) {\r\n    return Math.round((n+x\/2)\/x)*x;\r\n}\r\n            \r\n    \r\nvideojs(\"video1\").ready(function() {\r\n    \/\/console.log(\"Videojs Ready - should be called only once\");\r\n\tvar player1 = videojs(\"video1\");\r\n    var userIdAnon = 0;\r\n    var videoId = 12;\r\n    var anonTracking = \"N\";\r\n    var captions = localStorage.getItem('captions');\r\n    \/\/console.log(\"captions on load: \" + captions);\r\n    \r\n    if(captions === null) captions = \"on\";\r\n    \r\n    \r\n    var preferredLang = localStorage.getItem('caption-language');\r\n    let tracks = player1.textTracks();\r\n    var trackList = Array.prototype.slice.call(tracks);\r\n    var activeTrack = Array.from(tracks).find(track => track.mode === 'showing');\r\n    \/\/localStorage.setItem('caption-language', activeTrack.language);  \r\n    \/\/console.log(\"currently active language: \" + activeTrack.language);\r\n    \/\/console.log(\"preferredLang on load: \" + preferredLang);\r\n    var preferredLangIsSet = false;\r\n    \r\n    \/\/tracks.addEventListener('change', storeLanguageChoice);\r\n    \/\/var initialTrackLanguageChange = true;\r\n    \r\n    \/\/var videoEl1 = player1.el();\r\n\r\n    \r\n    var savedSpeed = localStorage.getItem('videoSpeed');\r\n    \/\/console.log(\"savedSpeed on load: \" + savedSpeed);\r\n    \r\n    if (savedSpeed) {\r\n        this.playbackRate(savedSpeed);\r\n    }\r\n    \r\n    \r\n    \/\/activeTrack = Array.from(tracks).find(track => track.mode === 'showing');\r\n    \/\/console.log(\"currently active language: \" + activeTrack.language);\r\n    \r\n    function setupTextTracks() {\r\n        \/\/console.log(\"in setupTextTracks\");\r\n        \/\/ If preferredLang found, get track and enable it\r\n        if( preferredLang && (captions === \"on\") ) {\r\n            \/\/console.log(\"preferredLang is set: \" + preferredLang);\r\n            tracks = player1.textTracks();\r\n            \/\/var targetTrack = Array.from(tracks).find(track => track.language === preferredLang);\r\n            \r\n            \/\/console.log(\"targetTrack mode: \" + targetTrack.mode);\r\n            \r\n            for (var i = 0; i < tracks.length; i++) {\r\n                var track = tracks[i];\r\n\r\n                \/\/ Check if the track is a captions track and if the language is German ('de')\r\n                if (track.kind === 'captions' && track.language === preferredLang) {\r\n                    \/\/console.log(\"Yes, match found\");\r\n                    track.mode = 'showing'; \/\/ Show the German captions\r\n                } else {\r\n                    track.mode = 'disabled'; \/\/ Hide other caption tracks\r\n                }\r\n            }\r\n            \r\n            preferredLangIsSet = true;\r\n        } \r\n    }\r\n    \r\n    \r\n    \/\/Can be moved to end??\r\n    \/\/Remembering Captions Settings on User Change\r\n    player1.textTracks().addEventListener('change', function() {\r\n        \/\/console.log(\"User changed captions settings\");\r\n\r\n        var tracks = player1.textTracks(); \r\n        \r\n        \/\/ Convert to array\r\n        var trackList = Array.prototype.slice.call(tracks);\r\n\r\n        \/\/ Check if captions are disabled \r\n        \/\/ I.e. no tracks in 'showing' mode\r\n        var disabled = !trackList.some(function(track) {\r\n            return track.mode === 'showing';  \r\n        });\r\n\r\n        if(disabled) {\r\n            \/\/ Captions were just set to off \r\n            localStorage.setItem('captions', 'off');\r\n            \/\/console.log('Captions disabled');\r\n        } else {\r\n            localStorage.setItem('captions', 'on');\r\n            \/\/console.log('Captions ENABLED');\r\n        }\r\n        \r\n        \r\n        if( captions === \"on\" ) {\r\n            trackList = Array.prototype.slice.call(tracks);\r\n            activeTrack = Array.from(tracks).find(track => track.mode === 'showing');\r\n            \/\/console.log(\"in User changed captions settings: active language: \" + activeTrack.language);\r\n            localStorage.setItem('caption-language', activeTrack.language);  \r\n        }\r\n\r\n    });\r\n    \r\n        \r\n    timesMuted = 0;\r\n    var button = document.createElement(\"button\");\r\n    button.setAttribute(\"id\", \"muteButton\");\r\n    var buttonRemoved = false;\r\n    var endTime = 0;\r\n\tvar restartedOnce = false;\r\n    \r\n    \/\/Disable full screen zand remove full screen on double click\r\n        \r\n\tthis.on('volumechange', function(){\r\n\t\ttimesMuted++;\r\n        \/\/alert(\"volume change \" + timesMuted);\r\n        if( !buttonRemoved && (timesMuted == 10000) ) {\r\n\t\t   \t\/\/alert(\"inside\");\r\n\t\t\tvideo1.removeChild(button);\r\n\t\t\t\/\/document.getElementById(\"muteButton\").remove();\r\n\t\t\tbuttonRemoved = true;\r\n\t\t   \tif(restartedOnce == false) {\r\n\t\t\t\tunmuteAndPlayFromStart1(player1);\r\n\t\t\t\trestartedOnce = true;\r\n\t\t\t}\r\n        }        \r\n    });\r\n    \r\n        \r\n    \r\n\r\n    \r\n    this.on('click', function(evt) {\r\n        \/\/console.log(\"video clicked, \" + evt.target.tagName);\r\n        if (evt.target.tagName === 'VIDEO') {\r\n            \/\/alert(\"after click unmuteAndPlayFromStart1(player1)\");\r\n            \/\/document.getElementsByTagName.removeChild(button);\r\n            if(!buttonRemoved) {\r\n                if(document.getElementById(\"muteButton\")) {\r\n                    document.getElementById(\"muteButton\").remove();\r\n                    buttonRemoved = true;\r\n                    if(restartedOnce == false) {\r\n\t\t\t\t\t\tunmuteAndPlayFromStart1(player1);\r\n\t\t\t\t\t\trestartedOnce = true;\r\n\t\t\t\t\t}\r\n                }\r\n            }\r\n        }\r\n        \r\n        \r\n    });\r\n    \r\n    this.on('pause', function() {\r\n        div = document.getElementsByClassName(\"vjs-watermark\")[1-1];\r\n        if (div) {\r\n            div.style.display = \"none\";\r\n        }\r\n        jQuery('#video1 .vjs-big-play-button').css('display', 'block');\r\n    });\r\n    \r\n        \r\n\tvar threshold1 = 15;\r\n\tvar counter1 = threshold1;\r\n    var duration1 = 455;\r\n    \r\n    \/\/Track loading time\r\n    \/\/console.log(\"ping 1: trackLoads\");\r\n\tvar data = {\r\n\t\t'action': 'trackLoads',\r\n\t\t'videoId': 12,\r\n\t\t'playTime': 0,\r\n        'event': 'load',\r\n        'postId': 2708\t};\r\n    \r\n\tjQuery.post(ajaxurl, data, function(response) { });\r\n    \r\n    st1 = -1;\r\n    et1 = 99999;\r\n    \/\/alert(\"st1: \" + st1 + \", et1: \" + et1);\r\n    playTime1 = 0;\r\n    playTimeCurrent1 = 0;\r\n    \r\n    if( (userIdAnon == 0) && (anonTracking == \"Y\") && (videoId == getCookie(\"videoIdAnon\")) ) {\r\n        playTimeAnon = getCookie(\"playTimeAnon\");\r\n        \/\/console.log(\"playTimeAnon from getCookie: \" + playTimeAnon); \r\n        \/\/console.log(\"videoId: \" + videoId);\r\n        playTimeCurrent1 = playTimeAnon;\r\n    }\r\n    \r\n    \/\/console.log(\"playTime1: \" + playTime1);\r\n    \/\/console.log(\"playTimeCurrent1: \" + playTimeCurrent1);\r\n    \r\n    \/\/console.log(parseInt(st1));\r\n    if(parseInt(st1) >= 0 ) {\r\n        playTimeCurrent1 = parseInt(st1);\r\n    }\r\n    this.currentTime(playTimeCurrent1);\r\n    if( (this.currentTime() + threshold1) > counter1 ) {\r\n        \/\/console.log(\"this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n        \/\/counter1 = this.currentTime() + threshold1;\r\n        counter1 = this.currentTime();\r\n        \/\/console.log(\"new this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n    }\r\n    \/\/console.log(\"playTime: \" + playTime);\r\n\tvar gotDuration1 = false;\r\n    \r\n    player1.ready(function(){\r\n        this.on('loadedmetadata', function(){ \r\n            \/\/console.log(\"this.duration: \" + this.duration());\r\n            duration1 = this.duration();\r\n            \/\/if (this.currentTime() <= duration1 -1)\r\n        })\r\n    });\r\n\r\n    this.on(\"seeked\", function(){\r\n        \/\/console.log(\"seeked: ------------------------Seeking\");\r\n        \r\n        cuepoint = 0;\r\n                \r\n        \r\n        ct = this.currentTime();\r\n        roundUpHowMuch = 1;\r\n        roundUp = roundUpToAny(ct,roundUpHowMuch);\r\n        \/\/diff = roundUp - counter1;\r\n        diff = ct - playTimeCurrent1;\r\n        diffRoundup = roundUpToAny(diff,roundUpHowMuch) - 30;\r\n        \/\/playTime1 = diffRoundup;\r\n        \/\/console.log(\"playTimeCurrent1: \" + playTimeCurrent1 + \", ct: \" + ct + \", roundUp: \" + roundUp + \", diff: \" + diff + \", diffRoundup: \" + diffRoundup);\r\n        \/\/console.log(\"seeked: currentTime \" + ct + \", old counter1: \" + counter1 + \", roundUp: \" + roundUp + \", diff: \" + diff);\r\n        counter1 = roundUp;\r\n        \/\/console.log(\"New counter1: \" + counter1);\r\n        \r\n        if( (diffRoundup > roundUpHowMuch) || (diffRoundup < -roundUpHowMuch) ) {\r\n            \/\/console.log(\"seeked: Yes, diff > roundUpHowMuch or < -roundUpHowMuch: \" + diffRoundup);\r\n            \/\/console.log(\"ping 2: seeked\");\r\n            var data = {\r\n                'action': 'trackViews',\r\n                'playTime': this.currentTime(),\r\n                'videoId': 12,\r\n                'duration': this.duration(),\r\n                'threshold': threshold1,\r\n                'event': 'seek',\r\n                'diff': diffRoundup,\r\n                'postId': 2708            };\r\n            jQuery.post(ajaxurl, data, function(response) { });\r\n        }\r\n        \r\n        playTimeCurrent1 = this.currentTime();\r\n        \/\/console.log(\"playTimeCurrent1: \" + playTimeCurrent1);\r\n\r\n        \/\/if(ct > roundUp) {\r\n            \/\/console.log(\"DO SOMETHING IMPORTANT HERE!!!!!!!!\");\r\n        \/\/}\r\n    });\r\n    \r\n    this.on(\"timeupdate\", function(){\r\n        \/\/console.log(\"in timeupdate\");\r\n        if (this.currentTime() >= et1) {\r\n            this.pause();\r\n        }\r\n        \r\n        \/\/if( (this.currentTime() + threshold1) > counter1 ) {\r\n            \/\/counter1 = this.currentTime() + threshold1;\r\n            \/\/console.log(\"this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n        \/\/}\r\n        \r\n        \/**\r\n        if (this.currentTime() <= duration1 -1) {\r\n            \/\/alert(\"here\");\r\n            playTime1 = 0;\r\n            playTimeCurrent1 = 0;\r\n        } else {\r\n            playTime1 = this.currentTime();\r\n            playTimeCurrent1 = this.currentTime();\r\n        }\r\n        \r\n        if( (this.currentTime() + threshold1) < counter1 ) {\r\n            console.log(\"this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n            counter1 = this.currentTime() + threshold1;\r\n            console.log(\"new this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n        }\r\n        *\/\r\n\t\t\r\n        \/\/console.log(\"timeupdate: ---> this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n        \r\n        if (this.currentTime() >= counter1) {\r\n            \/\/console.log(\"timeupdate: currentTime() >= counter1\");\r\n\r\n\t\t\t\/\/set a timer for threshold seconds\r\n            \/\/console.log(\"this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1 + \", threshold1: \" + threshold1);\r\n\t\t\tsetInterval(function() {\r\n\t\t\t\t\/\/do nothing\r\n\t\t\t}, threshold1 * 1000);\r\n\t\t\t\/\/alert (counter1 + \" seconds up\");\r\n\t\t\t\r\n\t\t\tcounter1 += threshold1;\r\n\r\n\t\t\tif(!gotDuration1) {\r\n\t\t\t\tduration1 = this.duration();\r\n\t\t\t\tgotDuration1 = true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\/\/Track play time\r\n            if( !this.paused() ) {\r\n                \/\/console.log(\"ping 3: timeupdate\");\r\n                var data = {\r\n                    'action': 'trackViews',\r\n                    'playTime': this.currentTime(),\r\n                    'videoId': 12,\r\n                    'duration': this.duration(),\r\n                    'threshold': threshold1,\r\n                    'event': 'play',\r\n                    'postId': 2708                };\r\n                jQuery.post(ajaxurl, data, function(response) { });\r\n                \r\n                if(userIdAnon == 0) { \/\/Anonymous user\r\n                    \/\/setCookie(\"userIdAnon\", \"0\", 30);\r\n                    setCookie(\"videoIdAnon\", \"12\", 30);\r\n                    setCookie(\"playTimeAnon\", this.currentTime(), 30);\r\n                    \/\/console.log(\"playTimeAnon: \" + this.currentTime());\r\n                }\r\n            }\r\n\r\n\t\t}\r\n        \r\n\t});\r\n\t\r\n    this.on(\"play\", function(){\r\n        \/\/this.playbackRate(1.5);\r\n        \/**\r\n        if(this.currentTime() < playTimeCurrent1) {\r\n            console.log(\"play: this.currentTime() < playTimeCurrent1\");\r\n            if(this.currentTime() < this.duration()) {\r\n                this.currentTime(playTimeCurrent1);\r\n            } else {\r\n                this.currentTime(0);\r\n            }\r\n            \/\/alert(this.currentTime() + \", \" + playTime);\r\n        }\r\n        *\/\r\n        \r\n                \r\n        \/**\r\n        var data = {\r\n            'action': 'trackLoads',\r\n            'videoId': 12,\r\n            'playTime': 0,\r\n            'event': 'start',\r\n            'postId': 2708        };\r\n    \r\n\t    jQuery.post(ajaxurl, data, function(response) { });        \r\n        \r\n        *\/\r\n        \r\n        jQuery('#video1 .vjs-big-play-button').css('display', 'none');\r\n        \r\n                    div = document.getElementsByClassName(\"vjs-watermark\")[1-1];\r\n            if (div) {\r\n                div.style.display = \"block\";\r\n            }\r\n                    });\r\n\r\n    \r\n    this.on(\"fullscreenchange\", function(){\r\n\t\tjQuery('.vjs-loading-spinner').remove();\r\n\t\tthis.loadingSpinner.hide();\r\n\t});\r\n\t\r\n    this.on('ended', function() {\r\n        \/\/console.log(\"ping 4: ended\");\r\n        var data = {\r\n\t\t\t'action': 'trackViews',\r\n\t\t\t'playTime': this.currentTime(),\r\n\t\t\t'videoId': 12,\r\n            'duration': this.duration(),\r\n            'threshold': threshold1,\r\n            'event': 'end',\r\n            'postId': 2708\t\t};\r\n        \/\/this.currentTime(st);\r\n        \/\/alert(\"starting time: \" + st);\r\n\t\tjQuery.post(ajaxurl, data, function(response) { });\r\n        \/\/console.log('ended: ' + this.duration());\r\n        \r\n        endTime1 = this.currentTime();\r\n\t\t\/\/Track play time\r\n\t\t\/\/console.log(\"event: end firing\");\r\n        counter1 = st1;\r\n        playTime1 = 0;\r\n        playTimeCurrent1 = 0;\r\n        this.currentTime(0);\r\n        threshold1 = 15;\r\n        \/\/console.log(\"ended: ping 2\");\r\n        \r\n  \t});\r\n    \r\n    \r\n    this.on('ratechange', function() {\r\n        var currentSpeed = this.playbackRate();\r\n        \/\/console.log(\"currentSpeed: \" + currentSpeed);\r\n        localStorage.setItem('videoSpeed', currentSpeed);\r\n    });\r\n    \r\n    \r\n        \r\n    \r\n        \r\n        \r\n    \r\n    \r\n    jQuery.fn.isInViewport = function() {\r\n        var elementTop = jQuery(this).offset().top;\r\n        var elementBottom = elementTop + jQuery(this).outerHeight();\r\n\r\n        var viewportTop = jQuery(window).scrollTop();\r\n        var viewportBottom = viewportTop + jQuery(window).height();\r\n\r\n        return elementBottom > viewportTop && elementTop < viewportBottom;\r\n    };\r\n    \r\n    \r\n    \r\n    \r\n        \r\nsetupTextTracks();\r\n    \r\n}); \/\/End videojs player ready\r\n\r\nvar promise;\r\n    \r\n\/\/localStorage.removeItem('captions');\r\n\/\/delete localStorage.captions;\r\n\/\/localStorage.clear();\r\n    \r\n\/* ]]> *\/\r\n<\/script>\r\n\r\n\r\n\r\n\r\n\n<\/div>\n<div style=\"position: relative; top: 20px;\">\n<p>More specifically, the spot channels will tell the desktop publishing program what color, and where, to place the ink on the plate. The the case of a 5th color PMS or Varnish plate, this will add cost to the press run. However, for a two color job, this can actually save money because you would not need to run 4 CMYK plates.<\/p>\n<p>&nbsp;<\/p>\n<p>To learn more about our complete 12 hour Photoshop Basic Course, simply go to <strong><a href=\"https:\/\/www.theartofretouching.com\/blog\/photoshop-basic-class\" title=\"Adobe Photoshop Basic Course available with downloaded videos\" target=\"_blank\" rel=\"noopener\">Photoshop Basic Course &#8211; Video Class Edition<\/a><\/strong>.<\/p>\n<p>&nbsp;<\/p>\n<p>This <strong>Adobe Photoshop Tutorial<\/strong> answers the question: How to use Spot Channels for prepress in Photoshop? If you would like to learn more about <strong>Photo Enhancement<\/strong> from a Professional Retoucher, I offer <a href=\"https:\/\/www.theartofretouching.com\/blog\/photoshop-classes\" title=\"Adobe Photoshop Basic and Intermediate Classes\" target=\"_blank\" rel=\"noopener\"><strong>Adobe Photoshop Classes<\/strong><\/a>. Please contact me today, and I will be able to add you to the schedule too. If you would just like to watch online videos, <a href=\"https:\/\/www.theartofretouching.com\" target=\"_self\" rel=\"noopener\"><strong>The Art of Retouching Studio<\/strong><\/a> offers many Photoshop Tutorials for Beginners and Advanced users.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This Adobe Photoshop tutorial video will introduce Spot Channels. This is the third of four videos about working with channels. We will explain what Spot Channels are, and how they differ from regular Color Channels. Before you watch this video, we recommend you watch the previous Adobe Photoshop tutorial about Color Channels and Alpha Channels, and you can then follow this one with the Channel Mixer.<\/p>\n<p>Spot colors are intended to be used with CMYK for printing. These will allow you to add extra colors for press such as PMS, create \u201cbump plates\u201d, or for detailed varnishes. The can be used to add a 5th color to a CMYK print run, or limit the image to a two color duotone image. Used with Quark Express or Adobe inDesign, either of the programs just mentioned can select, and print, the Spot Channel that was created in Photoshop.<\/p>\n","protected":false},"author":1,"featured_media":11148,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[7],"tags":[332,510,509,467,233,765,234,386,112,512,686,763,764,766],"class_list":["post-2708","post","type-post","status-publish","format-standard","has-post-thumbnail","category-retouchingbasics","tag-adobe-photoshop","tag-channel-palette","tag-channels","tag-color-channels","tag-cs5","tag-how-to-use-spot-channels","tag-photoshop-cs5-tutorial","tag-photoshop-tools","tag-photoshop-tutorial","tag-spot-channel","tag-spot-channels","tag-spot-channels-for-prepress","tag-spot-channels-for-printing","tag-what-are-spot-channels","entry","override"],"_links":{"self":[{"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/posts\/2708","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/comments?post=2708"}],"version-history":[{"count":4,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/posts\/2708\/revisions"}],"predecessor-version":[{"id":11447,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/posts\/2708\/revisions\/11447"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/media\/11148"}],"wp:attachment":[{"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/media?parent=2708"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/categories?post=2708"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/tags?post=2708"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}