{"id":7563,"date":"2014-08-28T16:00:13","date_gmt":"2014-08-28T20:00:13","guid":{"rendered":"http:\/\/www.theartofretouching.com\/blog\/?p=7563"},"modified":"2024-04-27T22:27:54","modified_gmt":"2024-04-28T05:27:54","slug":"lasso","status":"publish","type":"post","link":"https:\/\/www.theartofretouching.com\/blog\/lasso\/","title":{"rendered":"Lasso, Polygonal Lasso, Magnetic Lasso | Photoshop Beginner&#8217;s Tutorial"},"content":{"rendered":"<h2><span style=\"font-weight: bold;\">Lasso, Polygonal Lasso, Magnetic Lasso Tools<\/span><\/h2>\n<p><em>This video is available <strong>Free for Everyone<\/strong>.<\/em><br \/>\n\t<em><strong>Running Time<\/strong>: 10 minutes<\/em><\/p>\n<p>The purpose of making a selection, is so that you can make changes within a limited, and controlled  area.There are a variety of tools you should consider when making selections in your image. There are several that will allow you make direct selections by drawing them, and a few that let you make your selections based on color.<\/p>\n<p>I will preface this by saying that make generic selections like this might create what is called a Layer Mask, none of the techniques I am going to talk about are ones that I would teach to my students. they are simplistic, and will not yield optimal results. The reason I am talking about them with you now, is because they  are  an easy way to get you  to your end goals. While they are not the best, they are simply the easiest for you to get started with.<\/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\/2014\/09\/3-PSIntro_6_Lasso2.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_0\/videos\/3-PSIntro_6_Lasso.mp4?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIATFRWUZAOT3CJXS7C%2F20260902%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260902T125831Z&X-Amz-SignedHeaders=host&X-Amz-Expires=1000&X-Amz-Signature=ea2047afe07e5e175ae7da46dcd7910a493f4a2c4c5a061bffd40abb7a9688d5\" 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 = 59;\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 = 618;\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': 59,\r\n\t\t'playTime': 0,\r\n        'event': 'load',\r\n        'postId': 7563\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': 59,\r\n                'duration': this.duration(),\r\n                'threshold': threshold1,\r\n                'event': 'seek',\r\n                'diff': diffRoundup,\r\n                'postId': 7563            };\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': 59,\r\n                    'duration': this.duration(),\r\n                    'threshold': threshold1,\r\n                    'event': 'play',\r\n                    'postId': 7563                };\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\", \"59\", 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': 59,\r\n            'playTime': 0,\r\n            'event': 'start',\r\n            'postId': 7563        };\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': 59,\r\n            'duration': this.duration(),\r\n            'threshold': threshold1,\r\n            'event': 'end',\r\n            'postId': 7563\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<h4><strong>Making Selections<\/strong><\/h4>\n<p>With that said, let\u2019s start with the direct selections that are made by drawing with the mouse. When you click and hold on the lasso icon, you will see the options Lasso Tool, Polygonal Lasso Tool, and Magnetic Lasso Tool. <\/p>\n<p> The Lasso will make freeform selections, Polygonal lasso will make straight lines with anchor points, and the Magnetic Lasso will automatically look for contrasts and edges. The easiest to use is the Magnetic Lasso, so let\u2019s begin there.<\/p>\n<p>&nbsp;<\/p>\n<h4><strong>Lasso Tool<\/strong><\/h4>\n<p>The Lasso Tool is one of the most basic for making a selection.<br \/>\nWith the Lasso Tool alone, you can click and drag around an area and whatever shape your mouse creates will be the selection that Photoshop will make.<\/p>\n<p> Remember that depending on the steadiness of your hand, this may or may not create an accurate selection, especially when it comes to smaller edges.<\/p>\n<p>&nbsp;<\/p>\n<h4><strong>Polygonal Lasso Tool<\/strong><\/h4>\n<p>For cases where you you would like to have a little more control, you can use the Polygonal Lasso Tool. When you click on one part of your image, it creates an anchor point. When you let go of your mouse, the line simply follows your mouse cursor around, waiting for you to make another anchor point with a mouse click.<\/p>\n<p> When you click a second time, it creates an anchor point; a third time, another anchor point, and so on. The idea here is to make mouse clicks whenever you feel you need to. If there is a straight edge, you can make longer lines with anchor points that are far apart. When you have smaller edges or curves, you can make multiple anchor points by clicking more often as you go around the small curves.<\/p>\n<p> When you\u2019re done, simply go back to your starting anchor point until you see the little circle icon indicating a closed loop to finish the selection. It may take more time to refine your selection, but it\u2019s often easier to use this tool than the Lasso alone, because of the guided functionality of the anchor points that give you more control.<\/p>\n<p>&nbsp;<\/p>\n<h4><strong>Magnetic Lasso<\/strong><\/h4>\n<p>The Magnetic Lasso will be the simplest tool for now that you can use to make basic selections. With the tool selected, simply hold down the mouse key and drag it around the area of an image you want to select. What the tool does is it makes computations based on tonal changes and contrast so that it trails behind your cursor and tries to make smart selections along with you, depending on the accuracy of your mouse.<\/p>\n<p> When you\u2019re done with your selection and you zoom in, you will notice some imperfections in the selection, like a missed area or an extra pixel or two. This is to be expected, and there is no way around it. In order to fix those mistakes, you will need to use the Lasso Tool.<\/p>\n<p>&nbsp;<\/p>\n<h4><strong>Lasso Tool with Magnetic Lasso<\/strong><\/h4>\n<p>With the Lasso Tool, you can hold down the ALT\/OPT (Mac\/PC) Key and the cursor changes into a Lasso icon with a minus sign. This means that you can remove something from a selection. Alternately, when you hold down the Shift key, it will change into a Lasso icon with a plus sign, which means that you can add something to your selection.<\/p>\n<p> In case you want to remove extra pixels selected by the smart selections of the Magnetic Lasso, hold down the ALT\/OPT (Mac\/PC)  Key and click and drag around the object that you want to remove from the selection, basically encircling the extra pixel you wish to cut off. When you let go, this will remove the extra pixel and fix your selection.<\/p>\n<p> When you want to add a pixel to your selection, hold down the Shift key and click and drag around the area or edge you wish to include. You will notice that the icon becomes a Lasso tool with a plus sign, and when you let go after encircling the area you wish to add, you will see that it automatically adds to your selection.<\/p>\n<p> You can do the same for the other parts of your image. Remember that you can move around your image by holding down the Spacebar key to change your icon into the Hand tool that allows you to move your picture around.<\/p>\n<p>As you can see, these tools aren\u2019t really that accurate. All we\u2019re doing is making the best of the automatic computations in Photoshop, which is why we still prefer to use Masking techniques for more control over our selections. These are topics I cover in my Photoshop Basics 1 Course.<\/p>\n<p>&nbsp;<\/p>\n<h4><strong>Feathering<\/strong><\/h4>\n<p>Once you\u2019re happy with your selection, you have a choice with regard to your selection edge. Over at the Options Bar at the top, you can see the Feather box, which determines the softness of your edges.<\/p>\n<p> You can input the number of pixels you want for your feathering. Just keep in mind that we normally want to have a certain amount of softness to any edge rather than having a completely hard and defined edge, so try to see what works for you.<\/p>\n<p>&nbsp;<\/p>\n<h4><strong>Selection as an Adjustment Layer<\/strong><\/h4>\n<p>Now that you have your desired area selected, you can apply it to a separate layer. By clicking on any of the Adjustment Layers in the Adjustment Palette, let\u2019s say Levels, it automatically opens up your selection as a new layer with the Levels Properties window open. <\/p>\n<p>Here, you can adjust the tone (or color) of the selection by simply moving the sliders around. We discussed Levels in a previous chapter of this tutorial.<\/p>\n<p>One thing to note about making extreme changes to your selection is that when you zoom in (using the Ctrl + Spacebar function for the Zoom Tool), you will see the inaccuracies in the selection. You will notice a haloing effect around your unrefined selection.<\/p>\n<p> Now that we\u2019ve covered the basics of the Lasso tools, you should be able to make some simple selections for yourself. When combined with Adjustment Layers, the possibilities for your image corrections open up tremendously.<\/p>\n<p>&nbsp;<\/p>\n<table align=\"right\" border=\"0\" cellpadding=\"0\" width=\"256\">\n<tbody>\n<tr>\n<td><strong><a href=\"https:\/\/www.theartofretouching.com\/blog\/photoshop-portraits_camera_raw_smart_objects-class\" target=\"_self\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" align=\"right\" alt=\"Photoshop Perfection - Emergency Retouching Basics in Photoshop Class\" src=\"http:\/\/www.TheArtofRetouching.com\/blog\/images\/ads\/basic_0_dvd_case_v2.png\" width=\"247\" height=\"226\"  \/><\/a><\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>To learn more about our complete 2 Hour Photoshop Class that this video comes from, simply go to <strong><a href=\"https:\/\/www.theartofretouching.com\/blog\/retouching-for-beginners-class\" title=\"Photoshop Retouching Basic Tutorial\" target=\"_blank\" rel=\"noopener\">Emergency Retouching Basics for Photographers<\/a><\/strong>. This is a super simple class, designed to give good information, to anyone who has been intimidated by Photoshop. <strong>It&#8217;s Free<\/strong>. Enjoy.<\/p>\n<p><\/p>\n<p>This <strong>Adobe Photoshop Tutorial<\/strong> answers the question: How to make selections in Photoshop with the Lasso, Polygonal Lasso and the Magnetic Lasso? If you would like to learn more about <strong>Photo Enhancement<\/strong> from a Professional Retoucher, I offer <a title=\"Adobe Photoshop Basic and Intermediate Classes\" href=\"https:\/\/www.theartofretouching.com\/blog\/photoshop-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<\/div>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The purpose of making a selection, is so that you can make changes within a limited, and controlled area.There are a variety of tools you should consider when making selections in your image. There are several that will allow you make direct selections by drawing them, and a few that let you make your selections based on color.<\/p>\n<p>I will preface this by saying that make generic selections like this might create what is called a Layer Mask, none of the techniques I am going to talk about are ones that I would teach to my students. they are simplistic, and will not yield optimal results. The reason I am talking about them with you now, is because they are an easy way to get you to your end goals. While they are not the best, they are simply the easiest for you to get started with.<\/p>\n","protected":false},"author":1,"featured_media":10928,"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":[],"class_list":["post-7563","post","type-post","status-publish","format-standard","has-post-thumbnail","category-retouchingbasics","entry","override"],"_links":{"self":[{"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/posts\/7563","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=7563"}],"version-history":[{"count":10,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/posts\/7563\/revisions"}],"predecessor-version":[{"id":11567,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/posts\/7563\/revisions\/11567"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/media\/10928"}],"wp:attachment":[{"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/media?parent=7563"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/categories?post=7563"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/tags?post=7563"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}