{"id":64300,"date":"2024-07-30T03:01:00","date_gmt":"2024-07-29T17:01:00","guid":{"rendered":"https:\/\/65.254.95.247\/ITblog\/?p=64300"},"modified":"2024-08-03T16:18:52","modified_gmt":"2024-08-03T06:18:52","slug":"ffmpeg-video-overall-effects-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/ffmpeg-video-overall-effects-tutorial\/","title":{"rendered":"Ffmpeg Video Overall Effects Tutorial"},"content":{"rendered":"<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/Mac\/brushturkey_effects.gif\" rel=\"noopener\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Ffmpeg Video Overall Effects Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/Mac\/brushturkey_effects.gif\" title=\"Ffmpeg Video Overall Effects Tutorial\" \/><\/a><p class=\"wp-caption-text\">Ffmpeg Video Overall Effects Tutorial<\/p><\/div>\n<p>Today&#8217;s work (all on our macOS <a target=\"_blank\" title='MAMP for Apache\/PHP\/MySql on Mac OS X local web server' href='http:\/\/www.mamp.info' rel=\"noopener\">MAMP<\/a> local Apache\/PHP\/MySQL web server environment) is only &#8220;toe dipping&#8221; in a &#8220;great big sea of possibilities&#8221; regarding the great <a target=\"_blank\" title='ffmpeg' href='https:\/\/www.ffmpeg.org\/' rel=\"noopener\">ffmpeg<\/a>&#8216;s &#8220;filtering style abilities&#8221; further to yesterday&#8217;s <a title='Ffmpeg Video Subliminal Message Tutorial' href='#fvsmt'>Ffmpeg Video Subliminal Message Tutorial<\/a>, but &#8230;<\/p>\n<ul>\n<li>as you try out things you discover others &#8230;<\/li>\n<li>can be a foot in the door researching this type of work yourself &#8230;<\/li>\n<\/ul>\n<p> &#8230; we&#8217;re hoping.  And it&#8217;s not as if ffmpeg was on it&#8217;s own here with the second concept below &#8230;<\/p>\n<ol>\n<li>fade in and fade out video effect &#8230; inspired by <a target=\"_blank\" href='https:\/\/www.abyssale.com\/generate-video\/top-20-best-commands-for-ffmpeg' title='Top 20 best commands for FFmpeg' rel=\"noopener\">Top 20 best commands for FFmpeg<\/a> to try &#8230;<br \/>\n<code><br \/>\nffmpeg -i brush__turkey.m4v -vf \"fade=in:0:5,fade=out:73:5\" <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/Mac\/brushturkey_fadein_fadeout.m4v' rel=\"noopener\">brushturkey_fadein_fadeout.m4v<\/a><br \/>\n<\/code>\n<\/li>\n<li>colour balancing improvements regarding an underexposed video<\/li>\n<\/ol>\n<p> &#8230; as the &#8230;<\/p>\n<ul>\n<li><a target=\"_blank\" href='http:\/\/www.gimp.org' title='Gimp, or GIMP' rel=\"noopener\">Gimp<\/a> image editor&#8217;s abilities (matching a lot of what you read Photoshop can help with too) with Curves helped out &#8230; along with &#8230;<\/li>\n<li>Python expertly designed to link Gimp and ffmpeg &#8220;whole of video&#8221; manipulations<\/li>\n<\/ul>\n<p> &#8230; enacting &#8230;<\/p>\n<ol>\n<li>selection of a video still image, ideally not containing the Brush Turkey &#8230;<\/li>\n<li>open image in Gimp<\/li>\n<li><font size=1><a target=\"_blank\" href='https:\/\/en.wikipedia.org\/wiki\/Aoife_N%C3%AD_Fhearraigh' rel=\"noopener\">&#8220;Aoife&#8221;<\/a><\/font><sub>&#8216;esque<\/sub> Colo<font size=1><sub>u<\/sub><\/font>rs -&gt; Curves&#8230;<\/li>\n<li>opens Adjust Colour Curves subwindow (initially a straight line)<\/li>\n<li>but dragging it to become a curve in a way that brightens the underexposed image to improve &#8230; we then &#8230;<\/li>\n<li>click + button to Save presets to a name &#8230;<\/li>\n<li>controlled by left pointing infilled triangle icon click that Manages Presets &#8230; and we ended up with &#8230;<\/li>\n<li><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/Mac\/brush_-_turkey.presets\" rel=\"noopener\">bush_-_turkey.presets<\/a> &#8230;<br \/>\n<textarea id=mytaone># GIMP &#8216;Curves&#8217; settings<\/p>\n<p>(time 0)<br \/>\n(linear no)<br \/>\n(channel value)<br \/>\n(curve<br \/>\n    (curve-type smooth)<br \/>\n    (points 6 0 0 0.29906542056074764 0.671875 1 1)<br \/>\n    (point-types 3 smooth smooth smooth)<br \/>\n    (n-samples 256)<br \/>\n    (samples 256 0 0.011253983826165687 0.022505445976972523 0.033751864777061671 0.044990718551074289 0.056219485623651519 0.067435644319434537 0.078636672963064466 0.089820049879182504 0.10098325339242978 0.11212376182744743 0.12323905350887664 0.1343266067613586 0.14538389990953438 0.15640841127804514 0.16739761919153215 0.17834900197463646 0.18926003795199928 0.20012820544826168 0.2109509827880649 0.22172584829605008 0.23245028029685835 0.24312175711513084 0.25373775707550877 0.26429575850263332 0.27479323972114555 0.28522767905568669 0.29559655483089792 0.3058973453714201 0.31612752900189489 0.32628458404696314 0.33636598883126595 0.34636922167944456 0.35629176091614018 0.36613108486599399 0.37588467185364693 0.38555000020374036 0.39512454824091547 0.40460579428981336 0.41399121667507488 0.42327829372134163 0.43246450375325451 0.44154732509545486 0.45052423607258363 0.45939271500928214 0.46815024023019147 0.47679429005995277 0.48532234282320724 0.49373187684459596 0.50202037044876013 0.51018530196034095 0.51822414970397945 0.52613439200431689 0.5339135071859944 0.54155897357365324 0.54906826949193444 0.55643887326547903 0.56366826321892849 0.57075391767692363 0.57769331496410592 0.58448393340511628 0.59112325132459598 0.59760874704718603 0.6039378988975278 0.61010818520026233 0.61611708428003087 0.62196207446147445 0.6276406340692342 0.6331502414279514 0.63848837486226717 0.64365251269682255 0.64864013325625902 0.65344871486521738 0.65807573584833889 0.66251867453026458 0.66677500923563593 0.671875 0.67577909704236094 0.67964838149075235 0.68348304920948966 0.68728329606288863 0.6910493179152648 0.69478131063093362 0.69847947007421129 0.70214399210941336 0.70577507260085492 0.70937290741285197 0.71293769240972005 0.71646962345577492 0.71996889641533213 0.72343570715270744 0.72687025153221607 0.73027272541817401 0.73364332467489723 0.73698224516670052 0.7402896827579003 0.74356583331281156 0.74681089269575052 0.75002505677103248 0.75320852140297312 0.75636148245588819 0.7594841357940928 0.76257667728190348 0.76563930278363512 0.76867220816360382 0.77167558928612512 0.77464964201551445 0.77759456221608758 0.78051054575216006 0.78339778848804753 0.78625648628806577 0.78908683501653032 0.79188903053775672 0.79466326871606108 0.7974097454157586 0.8001286565011646 0.80282019783659542 0.80548456528636625 0.80812195471479298 0.81073256198619115 0.81331658296487608 0.81587421351516398 0.81840564950137007 0.82091108678780988 0.82339072123879942 0.82584474871865443 0.82827336509169003 0.83067676622222231 0.83305514797456648 0.83540870621303842 0.8377376368019539 0.84004213560562846 0.84232239848837742 0.84457862131451711 0.84681099994836251 0.84901973025422939 0.85120500809643351 0.85336702933929054 0.85550598984711601 0.85762208548422569 0.85971551211493491 0.86178646560355965 0.86383514181441523 0.86586173661181765 0.86786644586008233 0.86984946542352481 0.87181099116646099 0.87375121895320629 0.87567034464807647 0.87756856411538708 0.87944607321945378 0.88130306782459222 0.88313974379511817 0.88495629699534695 0.88675292328959454 0.88852981854217639 0.89028717861740791 0.89202519937960512 0.89374407669308376 0.89544400642215893 0.89712518443114653 0.8987878065843623 0.90043206874612158 0.90205816678074058 0.90366629655253439 0.90525665392581867 0.9068294347649094 0.90838483493412203 0.9099230502977721 0.91144427672017547 0.91294871006564771 0.91443654619850423 0.91590798098306081 0.9173632102836331 0.91880242996453687 0.92022583589008755 0.92163362392460069 0.92302598993239249 0.92440312977777772 0.92576523932507282 0.92711251443859277 0.92844515098265379 0.92976334482157108 0.93106729181966053 0.93235718784123756 0.93363322875061805 0.93489561041211733 0.93614452869005138 0.93738017944873553 0.93860275855248565 0.93981246186561729 0.94100948525244599 0.94219402457728751 0.94336627570445752 0.94452643449827156 0.94567469682304517 0.94681125854309423 0.94793631552273427 0.94905006362628086 0.95015269871804964 0.95124441666235626 0.95232541332351639 0.95339588456584567 0.95445602625365988 0.95550603425127423 0.95654610442300469 0.95757643263316683 0.9585972147460764 0.95960864662604872 0.9606109241373999 0.96160424314444504 0.96258879951150012 0.96356478910288057 0.96453240778290228 0.96549185141588079 0.96644331586613164 0.96738699699797048 0.96832309067571298 0.96925179276367479 0.97017329912617156 0.97108780562751895 0.97199550813203239 0.97289660250402765 0.97379128460782061 0.97467975030772647 0.97556219546806111 0.9764388159531403 0.97730980762727926 0.97817536635479407 0.97903568799999996 0.97989096842721302 0.98074140350074845 0.98158718908492215 0.98242852104404954 0.98326559524244661 0.98409860754442868 0.98492775381431152 0.98575322991641046 0.98657523171504169 0.98739395507452066 0.98820959585916268 0.98902234993328364 0.98983241316119908 0.99063998140722487 0.99144525053567634 0.99224841641086936 0.99304967489711937 0.99384922185874214 0.9946472531600532 0.99544396466536833 0.99623955223900307 0.99703421174527307 0.9978281390484941 0.99862153001298137 0.99941458050305099 1))<br \/>\n(channel red)<br \/>\n(curve<br \/>\n    (curve-type smooth)<br \/>\n    (points 4 0 0 1 1)<br \/>\n    (point-types 2 smooth smooth)<br \/>\n    (n-samples 256)<br \/>\n    (samples 256 0 0.0039215686274509803 0.0078431372549019607 0.011764705882352943 0.015686274509803921 0.019607843137254898 0.023529411764705879 0.027450980392156859 0.031372549019607843 0.035294117647058816 0.039215686274509803 0.043137254901960791 0.047058823529411764 0.050980392156862737 0.054901960784313725 0.058823529411764712 0.062745098039215685 0.066666666666666666 0.07058823529411766 0.07450980392156864 0.078431372549019621 0.082352941176470587 0.086274509803921567 0.090196078431372534 0.094117647058823528 0.098039215686274508 0.10196078431372547 0.10588235294117647 0.10980392156862745 0.11372549019607843 0.11764705882352938 0.1215686274509804 0.12549019607843137 0.12941176470588237 0.13333333333333336 0.13725490196078433 0.14117647058823532 0.14509803921568629 0.14901960784313723 0.15294117647058825 0.15686274509803921 0.16078431372549021 0.1647058823529412 0.16862745098039217 0.17254901960784311 0.17647058823529413 0.18039215686274507 0.18431372549019609 0.18823529411764706 0.19215686274509805 0.19607843137254902 0.20000000000000007 0.20392156862745101 0.20784313725490197 0.21176470588235291 0.21568627450980393 0.21960784313725493 0.22352941176470589 0.22745098039215686 0.23137254901960783 0.23529411764705882 0.23921568627450979 0.24313725490196075 0.24705882352941175 0.25098039215686274 0.25490196078431371 0.25882352941176473 0.26274509803921575 0.26666666666666672 0.27058823529411768 0.27450980392156865 0.27843137254901962 0.28235294117647064 0.2862745098039215 0.29019607843137252 0.29411764705882348 0.29803921568627445 0.30196078431372542 0.30588235294117649 0.30980392156862746 0.31372549019607843 0.31764705882352934 0.32156862745098053 0.32549019607843144 0.3294117647058824 0.33333333333333331 0.33725490196078434 0.3411764705882353 0.34509803921568633 0.34901960784313729 0.35294117647058826 0.35686274509803917 0.36078431372549019 0.3647058823529411 0.36862745098039224 0.37254901960784315 0.37647058823529411 0.38039215686274508 0.3843137254901961 0.38823529411764712 0.39215686274509809 0.39607843137254906 0.39999999999999997 0.40392156862745099 0.40784313725490196 0.41176470588235292 0.41568627450980383 0.41960784313725485 0.42352941176470582 0.42745098039215684 0.43137254901960786 0.43529411764705883 0.4392156862745098 0.44313725490196076 0.44705882352941184 0.45098039215686281 0.45490196078431377 0.45882352941176474 0.46274509803921571 0.46666666666666667 0.47058823529411764 0.47450980392156861 0.47843137254901957 0.48235294117647054 0.48627450980392145 0.49019607843137247 0.49411764705882355 0.49803921568627452 0.50196078431372548 0.50588235294117645 0.50980392156862742 0.51372549019607838 0.51764705882352946 0.52156862745098043 0.52549019607843139 0.52941176470588236 0.53333333333333333 0.53725490196078429 0.54117647058823526 0.54509803921568634 0.5490196078431373 0.55294117647058827 0.55686274509803924 0.5607843137254902 0.56470588235294117 0.56862745098039214 0.5725490196078431 0.57647058823529407 0.58039215686274515 0.58431372549019611 0.58823529411764708 0.59215686274509804 0.59607843137254901 0.59999999999999998 0.60392156862745094 0.60784313725490191 0.61176470588235299 0.61568627450980395 0.61960784313725492 0.62352941176470589 0.62745098039215685 0.63137254901960782 0.63529411764705879 0.63921568627450975 0.64313725490196083 0.6470588235294118 0.65098039215686287 0.65490196078431384 0.65882352941176481 0.66274509803921577 0.66666666666666663 0.6705882352941176 0.67450980392156867 0.67843137254901964 0.68235294117647061 0.68627450980392157 0.69019607843137254 0.69411764705882351 0.69803921568627447 0.70196078431372544 0.70588235294117663 0.70980392156862759 0.71372549019607845 0.71764705882352942 0.72156862745098038 0.72549019607843135 0.7294117647058822 0.73333333333333328 0.73725490196078436 0.74117647058823533 0.74509803921568629 0.74901960784313726 0.75294117647058822 0.75686274509803919 0.76078431372549016 0.76470588235294112 0.76862745098039231 0.77254901960784317 0.77647058823529425 0.78039215686274521 0.78431372549019607 0.78823529411764703 0.79215686274509811 0.79607843137254897 0.80000000000000004 0.80392156862745101 0.80784313725490198 0.81176470588235294 0.81568627450980391 0.81960784313725488 0.82352941176470584 0.82745098039215681 0.83137254901960789 0.83529411764705874 0.83921568627450982 0.84313725490196068 0.84705882352941175 0.85098039215686272 0.8549019607843138 0.85882352941176465 0.86274509803921573 0.8666666666666667 0.87058823529411766 0.87450980392156863 0.8784313725490196 0.88235294117647056 0.88627450980392164 0.8901960784313725 0.89411764705882357 0.89803921568627443 0.90196078431372551 0.90588235294117636 0.90980392156862755 0.91372549019607852 0.91764705882352937 0.92156862745098023 0.92549019607843142 0.92941176470588238 0.93333333333333335 0.93725490196078431 0.94117647058823528 0.94509803921568625 0.94901960784313721 0.95294117647058818 0.95686274509803926 0.96078431372549011 0.96470588235294119 0.96862745098039216 0.97254901960784312 0.97647058823529409 0.98039215686274506 0.98431372549019591 0.98823529411764721 0.99215686274509807 0.99607843137254914 1))<br \/>\n(channel green)<br \/>\n(curve<br \/>\n    (curve-type smooth)<br \/>\n    (points 4 0 0 1 1)<br \/>\n    (point-types 2 smooth smooth)<br \/>\n    (n-samples 256)<br \/>\n    (samples 256 0 0.0039215686274509803 0.0078431372549019607 0.011764705882352943 0.015686274509803921 0.019607843137254898 0.023529411764705879 0.027450980392156859 0.031372549019607843 0.035294117647058816 0.039215686274509803 0.043137254901960791 0.047058823529411764 0.050980392156862737 0.054901960784313725 0.058823529411764712 0.062745098039215685 0.066666666666666666 0.07058823529411766 0.07450980392156864 0.078431372549019621 0.082352941176470587 0.086274509803921567 0.090196078431372534 0.094117647058823528 0.098039215686274508 0.10196078431372547 0.10588235294117647 0.10980392156862745 0.11372549019607843 0.11764705882352938 0.1215686274509804 0.12549019607843137 0.12941176470588237 0.13333333333333336 0.13725490196078433 0.14117647058823532 0.14509803921568629 0.14901960784313723 0.15294117647058825 0.15686274509803921 0.16078431372549021 0.1647058823529412 0.16862745098039217 0.17254901960784311 0.17647058823529413 0.18039215686274507 0.18431372549019609 0.18823529411764706 0.19215686274509805 0.19607843137254902 0.20000000000000007 0.20392156862745101 0.20784313725490197 0.21176470588235291 0.21568627450980393 0.21960784313725493 0.22352941176470589 0.22745098039215686 0.23137254901960783 0.23529411764705882 0.23921568627450979 0.24313725490196075 0.24705882352941175 0.25098039215686274 0.25490196078431371 0.25882352941176473 0.26274509803921575 0.26666666666666672 0.27058823529411768 0.27450980392156865 0.27843137254901962 0.28235294117647064 0.2862745098039215 0.29019607843137252 0.29411764705882348 0.29803921568627445 0.30196078431372542 0.30588235294117649 0.30980392156862746 0.31372549019607843 0.31764705882352934 0.32156862745098053 0.32549019607843144 0.3294117647058824 0.33333333333333331 0.33725490196078434 0.3411764705882353 0.34509803921568633 0.34901960784313729 0.35294117647058826 0.35686274509803917 0.36078431372549019 0.3647058823529411 0.36862745098039224 0.37254901960784315 0.37647058823529411 0.38039215686274508 0.3843137254901961 0.38823529411764712 0.39215686274509809 0.39607843137254906 0.39999999999999997 0.40392156862745099 0.40784313725490196 0.41176470588235292 0.41568627450980383 0.41960784313725485 0.42352941176470582 0.42745098039215684 0.43137254901960786 0.43529411764705883 0.4392156862745098 0.44313725490196076 0.44705882352941184 0.45098039215686281 0.45490196078431377 0.45882352941176474 0.46274509803921571 0.46666666666666667 0.47058823529411764 0.47450980392156861 0.47843137254901957 0.48235294117647054 0.48627450980392145 0.49019607843137247 0.49411764705882355 0.49803921568627452 0.50196078431372548 0.50588235294117645 0.50980392156862742 0.51372549019607838 0.51764705882352946 0.52156862745098043 0.52549019607843139 0.52941176470588236 0.53333333333333333 0.53725490196078429 0.54117647058823526 0.54509803921568634 0.5490196078431373 0.55294117647058827 0.55686274509803924 0.5607843137254902 0.56470588235294117 0.56862745098039214 0.5725490196078431 0.57647058823529407 0.58039215686274515 0.58431372549019611 0.58823529411764708 0.59215686274509804 0.59607843137254901 0.59999999999999998 0.60392156862745094 0.60784313725490191 0.61176470588235299 0.61568627450980395 0.61960784313725492 0.62352941176470589 0.62745098039215685 0.63137254901960782 0.63529411764705879 0.63921568627450975 0.64313725490196083 0.6470588235294118 0.65098039215686287 0.65490196078431384 0.65882352941176481 0.66274509803921577 0.66666666666666663 0.6705882352941176 0.67450980392156867 0.67843137254901964 0.68235294117647061 0.68627450980392157 0.69019607843137254 0.69411764705882351 0.69803921568627447 0.70196078431372544 0.70588235294117663 0.70980392156862759 0.71372549019607845 0.71764705882352942 0.72156862745098038 0.72549019607843135 0.7294117647058822 0.73333333333333328 0.73725490196078436 0.74117647058823533 0.74509803921568629 0.74901960784313726 0.75294117647058822 0.75686274509803919 0.76078431372549016 0.76470588235294112 0.76862745098039231 0.77254901960784317 0.77647058823529425 0.78039215686274521 0.78431372549019607 0.78823529411764703 0.79215686274509811 0.79607843137254897 0.80000000000000004 0.80392156862745101 0.80784313725490198 0.81176470588235294 0.81568627450980391 0.81960784313725488 0.82352941176470584 0.82745098039215681 0.83137254901960789 0.83529411764705874 0.83921568627450982 0.84313725490196068 0.84705882352941175 0.85098039215686272 0.8549019607843138 0.85882352941176465 0.86274509803921573 0.8666666666666667 0.87058823529411766 0.87450980392156863 0.8784313725490196 0.88235294117647056 0.88627450980392164 0.8901960784313725 0.89411764705882357 0.89803921568627443 0.90196078431372551 0.90588235294117636 0.90980392156862755 0.91372549019607852 0.91764705882352937 0.92156862745098023 0.92549019607843142 0.92941176470588238 0.93333333333333335 0.93725490196078431 0.94117647058823528 0.94509803921568625 0.94901960784313721 0.95294117647058818 0.95686274509803926 0.96078431372549011 0.96470588235294119 0.96862745098039216 0.97254901960784312 0.97647058823529409 0.98039215686274506 0.98431372549019591 0.98823529411764721 0.99215686274509807 0.99607843137254914 1))<br \/>\n(channel blue)<br \/>\n(curve<br \/>\n    (curve-type smooth)<br \/>\n    (points 4 0 0 1 1)<br \/>\n    (point-types 2 smooth smooth)<br \/>\n    (n-samples 256)<br \/>\n    (samples 256 0 0.0039215686274509803 0.0078431372549019607 0.011764705882352943 0.015686274509803921 0.019607843137254898 0.023529411764705879 0.027450980392156859 0.031372549019607843 0.035294117647058816 0.039215686274509803 0.043137254901960791 0.047058823529411764 0.050980392156862737 0.054901960784313725 0.058823529411764712 0.062745098039215685 0.066666666666666666 0.07058823529411766 0.07450980392156864 0.078431372549019621 0.082352941176470587 0.086274509803921567 0.090196078431372534 0.094117647058823528 0.098039215686274508 0.10196078431372547 0.10588235294117647 0.10980392156862745 0.11372549019607843 0.11764705882352938 0.1215686274509804 0.12549019607843137 0.12941176470588237 0.13333333333333336 0.13725490196078433 0.14117647058823532 0.14509803921568629 0.14901960784313723 0.15294117647058825 0.15686274509803921 0.16078431372549021 0.1647058823529412 0.16862745098039217 0.17254901960784311 0.17647058823529413 0.18039215686274507 0.18431372549019609 0.18823529411764706 0.19215686274509805 0.19607843137254902 0.20000000000000007 0.20392156862745101 0.20784313725490197 0.21176470588235291 0.21568627450980393 0.21960784313725493 0.22352941176470589 0.22745098039215686 0.23137254901960783 0.23529411764705882 0.23921568627450979 0.24313725490196075 0.24705882352941175 0.25098039215686274 0.25490196078431371 0.25882352941176473 0.26274509803921575 0.26666666666666672 0.27058823529411768 0.27450980392156865 0.27843137254901962 0.28235294117647064 0.2862745098039215 0.29019607843137252 0.29411764705882348 0.29803921568627445 0.30196078431372542 0.30588235294117649 0.30980392156862746 0.31372549019607843 0.31764705882352934 0.32156862745098053 0.32549019607843144 0.3294117647058824 0.33333333333333331 0.33725490196078434 0.3411764705882353 0.34509803921568633 0.34901960784313729 0.35294117647058826 0.35686274509803917 0.36078431372549019 0.3647058823529411 0.36862745098039224 0.37254901960784315 0.37647058823529411 0.38039215686274508 0.3843137254901961 0.38823529411764712 0.39215686274509809 0.39607843137254906 0.39999999999999997 0.40392156862745099 0.40784313725490196 0.41176470588235292 0.41568627450980383 0.41960784313725485 0.42352941176470582 0.42745098039215684 0.43137254901960786 0.43529411764705883 0.4392156862745098 0.44313725490196076 0.44705882352941184 0.45098039215686281 0.45490196078431377 0.45882352941176474 0.46274509803921571 0.46666666666666667 0.47058823529411764 0.47450980392156861 0.47843137254901957 0.48235294117647054 0.48627450980392145 0.49019607843137247 0.49411764705882355 0.49803921568627452 0.50196078431372548 0.50588235294117645 0.50980392156862742 0.51372549019607838 0.51764705882352946 0.52156862745098043 0.52549019607843139 0.52941176470588236 0.53333333333333333 0.53725490196078429 0.54117647058823526 0.54509803921568634 0.5490196078431373 0.55294117647058827 0.55686274509803924 0.5607843137254902 0.56470588235294117 0.56862745098039214 0.5725490196078431 0.57647058823529407 0.58039215686274515 0.58431372549019611 0.58823529411764708 0.59215686274509804 0.59607843137254901 0.59999999999999998 0.60392156862745094 0.60784313725490191 0.61176470588235299 0.61568627450980395 0.61960784313725492 0.62352941176470589 0.62745098039215685 0.63137254901960782 0.63529411764705879 0.63921568627450975 0.64313725490196083 0.6470588235294118 0.65098039215686287 0.65490196078431384 0.65882352941176481 0.66274509803921577 0.66666666666666663 0.6705882352941176 0.67450980392156867 0.67843137254901964 0.68235294117647061 0.68627450980392157 0.69019607843137254 0.69411764705882351 0.69803921568627447 0.70196078431372544 0.70588235294117663 0.70980392156862759 0.71372549019607845 0.71764705882352942 0.72156862745098038 0.72549019607843135 0.7294117647058822 0.73333333333333328 0.73725490196078436 0.74117647058823533 0.74509803921568629 0.74901960784313726 0.75294117647058822 0.75686274509803919 0.76078431372549016 0.76470588235294112 0.76862745098039231 0.77254901960784317 0.77647058823529425 0.78039215686274521 0.78431372549019607 0.78823529411764703 0.79215686274509811 0.79607843137254897 0.80000000000000004 0.80392156862745101 0.80784313725490198 0.81176470588235294 0.81568627450980391 0.81960784313725488 0.82352941176470584 0.82745098039215681 0.83137254901960789 0.83529411764705874 0.83921568627450982 0.84313725490196068 0.84705882352941175 0.85098039215686272 0.8549019607843138 0.85882352941176465 0.86274509803921573 0.8666666666666667 0.87058823529411766 0.87450980392156863 0.8784313725490196 0.88235294117647056 0.88627450980392164 0.8901960784313725 0.89411764705882357 0.89803921568627443 0.90196078431372551 0.90588235294117636 0.90980392156862755 0.91372549019607852 0.91764705882352937 0.92156862745098023 0.92549019607843142 0.92941176470588238 0.93333333333333335 0.93725490196078431 0.94117647058823528 0.94509803921568625 0.94901960784313721 0.95294117647058818 0.95686274509803926 0.96078431372549011 0.96470588235294119 0.96862745098039216 0.97254901960784312 0.97647058823529409 0.98039215686274506 0.98431372549019591 0.98823529411764721 0.99215686274509807 0.99607843137254914 1))<br \/>\n(channel alpha)<br \/>\n(curve<br \/>\n    (curve-type smooth)<br \/>\n    (points 4 0 0 1 1)<br \/>\n    (point-types 2 smooth smooth)<br \/>\n    (n-samples 256)<br \/>\n    (samples 256 0 0.0039215686274509803 0.0078431372549019607 0.011764705882352943 0.015686274509803921 0.019607843137254898 0.023529411764705879 0.027450980392156859 0.031372549019607843 0.035294117647058816 0.039215686274509803 0.043137254901960791 0.047058823529411764 0.050980392156862737 0.054901960784313725 0.058823529411764712 0.062745098039215685 0.066666666666666666 0.07058823529411766 0.07450980392156864 0.078431372549019621 0.082352941176470587 0.086274509803921567 0.090196078431372534 0.094117647058823528 0.098039215686274508 0.10196078431372547 0.10588235294117647 0.10980392156862745 0.11372549019607843 0.11764705882352938 0.1215686274509804 0.12549019607843137 0.12941176470588237 0.13333333333333336 0.13725490196078433 0.14117647058823532 0.14509803921568629 0.14901960784313723 0.15294117647058825 0.15686274509803921 0.16078431372549021 0.1647058823529412 0.16862745098039217 0.17254901960784311 0.17647058823529413 0.18039215686274507 0.18431372549019609 0.18823529411764706 0.19215686274509805 0.19607843137254902 0.20000000000000007 0.20392156862745101 0.20784313725490197 0.21176470588235291 0.21568627450980393 0.21960784313725493 0.22352941176470589 0.22745098039215686 0.23137254901960783 0.23529411764705882 0.23921568627450979 0.24313725490196075 0.24705882352941175 0.25098039215686274 0.25490196078431371 0.25882352941176473 0.26274509803921575 0.26666666666666672 0.27058823529411768 0.27450980392156865 0.27843137254901962 0.28235294117647064 0.2862745098039215 0.29019607843137252 0.29411764705882348 0.29803921568627445 0.30196078431372542 0.30588235294117649 0.30980392156862746 0.31372549019607843 0.31764705882352934 0.32156862745098053 0.32549019607843144 0.3294117647058824 0.33333333333333331 0.33725490196078434 0.3411764705882353 0.34509803921568633 0.34901960784313729 0.35294117647058826 0.35686274509803917 0.36078431372549019 0.3647058823529411 0.36862745098039224 0.37254901960784315 0.37647058823529411 0.38039215686274508 0.3843137254901961 0.38823529411764712 0.39215686274509809 0.39607843137254906 0.39999999999999997 0.40392156862745099 0.40784313725490196 0.41176470588235292 0.41568627450980383 0.41960784313725485 0.42352941176470582 0.42745098039215684 0.43137254901960786 0.43529411764705883 0.4392156862745098 0.44313725490196076 0.44705882352941184 0.45098039215686281 0.45490196078431377 0.45882352941176474 0.46274509803921571 0.46666666666666667 0.47058823529411764 0.47450980392156861 0.47843137254901957 0.48235294117647054 0.48627450980392145 0.49019607843137247 0.49411764705882355 0.49803921568627452 0.50196078431372548 0.50588235294117645 0.50980392156862742 0.51372549019607838 0.51764705882352946 0.52156862745098043 0.52549019607843139 0.52941176470588236 0.53333333333333333 0.53725490196078429 0.54117647058823526 0.54509803921568634 0.5490196078431373 0.55294117647058827 0.55686274509803924 0.5607843137254902 0.56470588235294117 0.56862745098039214 0.5725490196078431 0.57647058823529407 0.58039215686274515 0.58431372549019611 0.58823529411764708 0.59215686274509804 0.59607843137254901 0.59999999999999998 0.60392156862745094 0.60784313725490191 0.61176470588235299 0.61568627450980395 0.61960784313725492 0.62352941176470589 0.62745098039215685 0.63137254901960782 0.63529411764705879 0.63921568627450975 0.64313725490196083 0.6470588235294118 0.65098039215686287 0.65490196078431384 0.65882352941176481 0.66274509803921577 0.66666666666666663 0.6705882352941176 0.67450980392156867 0.67843137254901964 0.68235294117647061 0.68627450980392157 0.69019607843137254 0.69411764705882351 0.69803921568627447 0.70196078431372544 0.70588235294117663 0.70980392156862759 0.71372549019607845 0.71764705882352942 0.72156862745098038 0.72549019607843135 0.7294117647058822 0.73333333333333328 0.73725490196078436 0.74117647058823533 0.74509803921568629 0.74901960784313726 0.75294117647058822 0.75686274509803919 0.76078431372549016 0.76470588235294112 0.76862745098039231 0.77254901960784317 0.77647058823529425 0.78039215686274521 0.78431372549019607 0.78823529411764703 0.79215686274509811 0.79607843137254897 0.80000000000000004 0.80392156862745101 0.80784313725490198 0.81176470588235294 0.81568627450980391 0.81960784313725488 0.82352941176470584 0.82745098039215681 0.83137254901960789 0.83529411764705874 0.83921568627450982 0.84313725490196068 0.84705882352941175 0.85098039215686272 0.8549019607843138 0.85882352941176465 0.86274509803921573 0.8666666666666667 0.87058823529411766 0.87450980392156863 0.8784313725490196 0.88235294117647056 0.88627450980392164 0.8901960784313725 0.89411764705882357 0.89803921568627443 0.90196078431372551 0.90588235294117636 0.90980392156862755 0.91372549019607852 0.91764705882352937 0.92156862745098023 0.92549019607843142 0.92941176470588238 0.93333333333333335 0.93725490196078431 0.94117647058823528 0.94509803921568625 0.94901960784313721 0.95294117647058818 0.95686274509803926 0.96078431372549011 0.96470588235294119 0.96862745098039216 0.97254901960784312 0.97647058823529409 0.98039215686274506 0.98431372549019591 0.98823529411764721 0.99215686274509807 0.99607843137254914 1))<\/p>\n<p># end of &#8216;Curves&#8217; settings<br \/>\n<\/textarea><br \/>\n<script type=text\/javascript>\n  function dvit(insg) {\n   while (insg.indexOf('<' + 'p' + '>') != -1) { insg=insg.replace('<' + 'p' + '>', ''); }\n   while (insg.indexOf('<\/' + 'p' + '>') != -1) { insg=insg.replace('<\/' + 'p' + '>', ''); }\n   while (insg.indexOf('<' + 'br' + ' \/>') != -1) { insg=insg.replace('<' + 'br' + ' \/>', ''); }\n   while (insg.indexOf('<' + 'br' + '\/>') != -1) { insg=insg.replace('<' + 'br' + '\/>', ''); }\n   while (insg.indexOf('<' + 'br' + '>') != -1) { insg=insg.replace('<' + 'br' + '>', ''); }\n   return insg; \n  }\n<\/script><br \/>\n<iframe style=display:none; onload=\"setTimeout(function(){ var dv=document.getElementById('mytaone').value;  \n document.getElementById('mytaone').value=dvit(dv); dv=document.getElementById('mytatwo').value;  \n document.getElementById('mytatwo').value=dvit(dv); }, 8000);\" src=\/\/www.rjmprogramming.com.au\/About_Us.html><\/iframe>\n<\/li>\n<li>and then we discovered this <a target=\"_blank\" href='https:\/\/gist.github.com\/carlosgeos\/02c8a6bfb06b6495e539bb855ddfe507' title='Converts GIMP colour curve to something the FFmpeg can read in the curve filter' rel=\"noopener\">Converts GIMP colour curve to something the FFmpeg can read in the curve filter<\/a> excellent project, the extraction of the Python there allowing us to go &#8230;<br \/>\n<code><br \/>\npython3 ..\/gimp_curves_ffmpeg.py<br \/>\n<\/code><br \/>\n &#8230; to output <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/Mac\/brush.out\" rel=\"noopener\">brush.out<\/a> &#8230;<br \/>\n<textarea id=mytatwo>Final Command<\/p>\n<p>curves=master=&#8221;0.0\/0 0.01171875\/0.033751864777061671 0.0234375\/0.067435644319434537 0.03515625\/0.10098325339242978 0.046875\/0.1343266067613586 0.05859375\/0.16739761919153215 0.0703125\/0.20012820544826168 0.08203125\/0.23245028029685835 0.09375\/0.26429575850263332 0.10546875\/0.29559655483089792 0.1171875\/0.32628458404696314 0.12890625\/0.35629176091614018 0.140625\/0.38555000020374036 0.15234375\/0.41399121667507488 0.1640625\/0.44154732509545486 0.17578125\/0.46815024023019147 0.1875\/0.49373187684459596 0.19921875\/0.51822414970397945 0.2109375\/0.54155897357365324 0.22265625\/0.56366826321892849 0.234375\/0.58448393340511628 0.24609375\/0.6039378988975278 0.2578125\/0.62196207446147445 0.26953125\/0.63848837486226717 0.28125\/0.65344871486521738 0.29296875\/0.66677500923563593 0.3046875\/0.67964838149075235 0.31640625\/0.6910493179152648 0.328125\/0.70214399210941336 0.33984375\/0.71293769240972005 0.3515625\/0.72343570715270744 0.36328125\/0.73364332467489723 0.375\/0.74356583331281156 0.38671875\/0.75320852140297312 0.3984375\/0.76257667728190348 0.41015625\/0.77167558928612512 0.421875\/0.78051054575216006 0.43359375\/0.78908683501653032 0.4453125\/0.7974097454157586 0.45703125\/0.80548456528636625 0.46875\/0.81331658296487608 0.48046875\/0.82091108678780988 0.4921875\/0.82827336509169003 0.50390625\/0.83540870621303842 0.515625\/0.84232239848837742 0.52734375\/0.84901973025422939 0.5390625\/0.85550598984711601 0.55078125\/0.86178646560355965 0.5625\/0.86786644586008233 0.57421875\/0.87375121895320629 0.5859375\/0.87944607321945378 0.59765625\/0.88495629699534695 0.609375\/0.89028717861740791 0.62109375\/0.89544400642215893 0.6328125\/0.90043206874612158 0.64453125\/0.90525665392581867 0.65625\/0.9099230502977721 0.66796875\/0.91443654619850423 0.6796875\/0.91880242996453687 0.69140625\/0.92302598993239249 0.703125\/0.92711251443859277 0.71484375\/0.93106729181966053 0.7265625\/0.93489561041211733 0.73828125\/0.93860275855248565 0.75\/0.94219402457728751 0.76171875\/0.94567469682304517 0.7734375\/0.94905006362628086 0.78515625\/0.95232541332351639 0.796875\/0.95550603425127423 0.80859375\/0.9585972147460764 0.8203125\/0.96160424314444504 0.83203125\/0.96453240778290228 0.84375\/0.96738699699797048 0.85546875\/0.97017329912617156 0.8671875\/0.97289660250402765 0.87890625\/0.97556219546806111 0.890625\/0.97817536635479407 0.90234375\/0.98074140350074845 0.9140625\/0.98326559524244661 0.92578125\/0.98575322991641046 0.9375\/0.98820959585916268 0.94921875\/0.99063998140722487 0.9609375\/0.99304967489711937 0.97265625\/0.99544396466536833 0.984375\/0.9978281390484941 0.99609375\/1&#8243;:red=&#8221;0.0\/0 0.01171875\/0.011764705882352943 0.0234375\/0.023529411764705879 0.03515625\/0.035294117647058816 0.046875\/0.047058823529411764 0.05859375\/0.058823529411764712 0.0703125\/0.07058823529411766 0.08203125\/0.082352941176470587 0.09375\/0.094117647058823528 0.10546875\/0.10588235294117647 0.1171875\/0.11764705882352938 0.12890625\/0.12941176470588237 0.140625\/0.14117647058823532 0.15234375\/0.15294117647058825 0.1640625\/0.1647058823529412 0.17578125\/0.17647058823529413 0.1875\/0.18823529411764706 0.19921875\/0.20000000000000007 0.2109375\/0.21176470588235291 0.22265625\/0.22352941176470589 0.234375\/0.23529411764705882 0.24609375\/0.24705882352941175 0.2578125\/0.25882352941176473 0.26953125\/0.27058823529411768 0.28125\/0.28235294117647064 0.29296875\/0.29411764705882348 0.3046875\/0.30588235294117649 0.31640625\/0.31764705882352934 0.328125\/0.3294117647058824 0.33984375\/0.3411764705882353 0.3515625\/0.35294117647058826 0.36328125\/0.3647058823529411 0.375\/0.37647058823529411 0.38671875\/0.38823529411764712 0.3984375\/0.39999999999999997 0.41015625\/0.41176470588235292 0.421875\/0.42352941176470582 0.43359375\/0.43529411764705883 0.4453125\/0.44705882352941184 0.45703125\/0.45882352941176474 0.46875\/0.47058823529411764 0.48046875\/0.48235294117647054 0.4921875\/0.49411764705882355 0.50390625\/0.50588235294117645 0.515625\/0.51764705882352946 0.52734375\/0.52941176470588236 0.5390625\/0.54117647058823526 0.55078125\/0.55294117647058827 0.5625\/0.56470588235294117 0.57421875\/0.57647058823529407 0.5859375\/0.58823529411764708 0.59765625\/0.59999999999999998 0.609375\/0.61176470588235299 0.62109375\/0.62352941176470589 0.6328125\/0.63529411764705879 0.64453125\/0.6470588235294118 0.65625\/0.65882352941176481 0.66796875\/0.6705882352941176 0.6796875\/0.68235294117647061 0.69140625\/0.69411764705882351 0.703125\/0.70588235294117663 0.71484375\/0.71764705882352942 0.7265625\/0.7294117647058822 0.73828125\/0.74117647058823533 0.75\/0.75294117647058822 0.76171875\/0.76470588235294112 0.7734375\/0.77647058823529425 0.78515625\/0.78823529411764703 0.796875\/0.80000000000000004 0.80859375\/0.81176470588235294 0.8203125\/0.82352941176470584 0.83203125\/0.83529411764705874 0.84375\/0.84705882352941175 0.85546875\/0.85882352941176465 0.8671875\/0.87058823529411766 0.87890625\/0.88235294117647056 0.890625\/0.89411764705882357 0.90234375\/0.90588235294117636 0.9140625\/0.91764705882352937 0.92578125\/0.92941176470588238 0.9375\/0.94117647058823528 0.94921875\/0.95294117647058818 0.9609375\/0.96470588235294119 0.97265625\/0.97647058823529409 0.984375\/0.98823529411764721 0.99609375\/1&#8243;:green=&#8221;0.0\/0 0.01171875\/0.011764705882352943 0.0234375\/0.023529411764705879 0.03515625\/0.035294117647058816 0.046875\/0.047058823529411764 0.05859375\/0.058823529411764712 0.0703125\/0.07058823529411766 0.08203125\/0.082352941176470587 0.09375\/0.094117647058823528 0.10546875\/0.10588235294117647 0.1171875\/0.11764705882352938 0.12890625\/0.12941176470588237 0.140625\/0.14117647058823532 0.15234375\/0.15294117647058825 0.1640625\/0.1647058823529412 0.17578125\/0.17647058823529413 0.1875\/0.18823529411764706 0.19921875\/0.20000000000000007 0.2109375\/0.21176470588235291 0.22265625\/0.22352941176470589 0.234375\/0.23529411764705882 0.24609375\/0.24705882352941175 0.2578125\/0.25882352941176473 0.26953125\/0.27058823529411768 0.28125\/0.28235294117647064 0.29296875\/0.29411764705882348 0.3046875\/0.30588235294117649 0.31640625\/0.31764705882352934 0.328125\/0.3294117647058824 0.33984375\/0.3411764705882353 0.3515625\/0.35294117647058826 0.36328125\/0.3647058823529411 0.375\/0.37647058823529411 0.38671875\/0.38823529411764712 0.3984375\/0.39999999999999997 0.41015625\/0.41176470588235292 0.421875\/0.42352941176470582 0.43359375\/0.43529411764705883 0.4453125\/0.44705882352941184 0.45703125\/0.45882352941176474 0.46875\/0.47058823529411764 0.48046875\/0.48235294117647054 0.4921875\/0.49411764705882355 0.50390625\/0.50588235294117645 0.515625\/0.51764705882352946 0.52734375\/0.52941176470588236 0.5390625\/0.54117647058823526 0.55078125\/0.55294117647058827 0.5625\/0.56470588235294117 0.57421875\/0.57647058823529407 0.5859375\/0.58823529411764708 0.59765625\/0.59999999999999998 0.609375\/0.61176470588235299 0.62109375\/0.62352941176470589 0.6328125\/0.63529411764705879 0.64453125\/0.6470588235294118 0.65625\/0.65882352941176481 0.66796875\/0.6705882352941176 0.6796875\/0.68235294117647061 0.69140625\/0.69411764705882351 0.703125\/0.70588235294117663 0.71484375\/0.71764705882352942 0.7265625\/0.7294117647058822 0.73828125\/0.74117647058823533 0.75\/0.75294117647058822 0.76171875\/0.76470588235294112 0.7734375\/0.77647058823529425 0.78515625\/0.78823529411764703 0.796875\/0.80000000000000004 0.80859375\/0.81176470588235294 0.8203125\/0.82352941176470584 0.83203125\/0.83529411764705874 0.84375\/0.84705882352941175 0.85546875\/0.85882352941176465 0.8671875\/0.87058823529411766 0.87890625\/0.88235294117647056 0.890625\/0.89411764705882357 0.90234375\/0.90588235294117636 0.9140625\/0.91764705882352937 0.92578125\/0.92941176470588238 0.9375\/0.94117647058823528 0.94921875\/0.95294117647058818 0.9609375\/0.96470588235294119 0.97265625\/0.97647058823529409 0.984375\/0.98823529411764721 0.99609375\/1&#8243;:blue=&#8221;0.0\/0 0.01171875\/0.011764705882352943 0.0234375\/0.023529411764705879 0.03515625\/0.035294117647058816 0.046875\/0.047058823529411764 0.05859375\/0.058823529411764712 0.0703125\/0.07058823529411766 0.08203125\/0.082352941176470587 0.09375\/0.094117647058823528 0.10546875\/0.10588235294117647 0.1171875\/0.11764705882352938 0.12890625\/0.12941176470588237 0.140625\/0.14117647058823532 0.15234375\/0.15294117647058825 0.1640625\/0.1647058823529412 0.17578125\/0.17647058823529413 0.1875\/0.18823529411764706 0.19921875\/0.20000000000000007 0.2109375\/0.21176470588235291 0.22265625\/0.22352941176470589 0.234375\/0.23529411764705882 0.24609375\/0.24705882352941175 0.2578125\/0.25882352941176473 0.26953125\/0.27058823529411768 0.28125\/0.28235294117647064 0.29296875\/0.29411764705882348 0.3046875\/0.30588235294117649 0.31640625\/0.31764705882352934 0.328125\/0.3294117647058824 0.33984375\/0.3411764705882353 0.3515625\/0.35294117647058826 0.36328125\/0.3647058823529411 0.375\/0.37647058823529411 0.38671875\/0.38823529411764712 0.3984375\/0.39999999999999997 0.41015625\/0.41176470588235292 0.421875\/0.42352941176470582 0.43359375\/0.43529411764705883 0.4453125\/0.44705882352941184 0.45703125\/0.45882352941176474 0.46875\/0.47058823529411764 0.48046875\/0.48235294117647054 0.4921875\/0.49411764705882355 0.50390625\/0.50588235294117645 0.515625\/0.51764705882352946 0.52734375\/0.52941176470588236 0.5390625\/0.54117647058823526 0.55078125\/0.55294117647058827 0.5625\/0.56470588235294117 0.57421875\/0.57647058823529407 0.5859375\/0.58823529411764708 0.59765625\/0.59999999999999998 0.609375\/0.61176470588235299 0.62109375\/0.62352941176470589 0.6328125\/0.63529411764705879 0.64453125\/0.6470588235294118 0.65625\/0.65882352941176481 0.66796875\/0.6705882352941176 0.6796875\/0.68235294117647061 0.69140625\/0.69411764705882351 0.703125\/0.70588235294117663 0.71484375\/0.71764705882352942 0.7265625\/0.7294117647058822 0.73828125\/0.74117647058823533 0.75\/0.75294117647058822 0.76171875\/0.76470588235294112 0.7734375\/0.77647058823529425 0.78515625\/0.78823529411764703 0.796875\/0.80000000000000004 0.80859375\/0.81176470588235294 0.8203125\/0.82352941176470584 0.83203125\/0.83529411764705874 0.84375\/0.84705882352941175 0.85546875\/0.85882352941176465 0.8671875\/0.87058823529411766 0.87890625\/0.88235294117647056 0.890625\/0.89411764705882357 0.90234375\/0.90588235294117636 0.9140625\/0.91764705882352937 0.92578125\/0.92941176470588238 0.9375\/0.94117647058823528 0.94921875\/0.95294117647058818 0.9609375\/0.96470588235294119 0.97265625\/0.97647058823529409 0.984375\/0.98823529411764721 0.99609375\/1&#8243;<\/p>\n<p>master<\/p>\n<p>0.0\/0 0.01171875\/0.033751864777061671 0.0234375\/0.067435644319434537 0.03515625\/0.10098325339242978 0.046875\/0.1343266067613586 0.05859375\/0.16739761919153215 0.0703125\/0.20012820544826168 0.08203125\/0.23245028029685835 0.09375\/0.26429575850263332 0.10546875\/0.29559655483089792 0.1171875\/0.32628458404696314 0.12890625\/0.35629176091614018 0.140625\/0.38555000020374036 0.15234375\/0.41399121667507488 0.1640625\/0.44154732509545486 0.17578125\/0.46815024023019147 0.1875\/0.49373187684459596 0.19921875\/0.51822414970397945 0.2109375\/0.54155897357365324 0.22265625\/0.56366826321892849 0.234375\/0.58448393340511628 0.24609375\/0.6039378988975278 0.2578125\/0.62196207446147445 0.26953125\/0.63848837486226717 0.28125\/0.65344871486521738 0.29296875\/0.66677500923563593 0.3046875\/0.67964838149075235 0.31640625\/0.6910493179152648 0.328125\/0.70214399210941336 0.33984375\/0.71293769240972005 0.3515625\/0.72343570715270744 0.36328125\/0.73364332467489723 0.375\/0.74356583331281156 0.38671875\/0.75320852140297312 0.3984375\/0.76257667728190348 0.41015625\/0.77167558928612512 0.421875\/0.78051054575216006 0.43359375\/0.78908683501653032 0.4453125\/0.7974097454157586 0.45703125\/0.80548456528636625 0.46875\/0.81331658296487608 0.48046875\/0.82091108678780988 0.4921875\/0.82827336509169003 0.50390625\/0.83540870621303842 0.515625\/0.84232239848837742 0.52734375\/0.84901973025422939 0.5390625\/0.85550598984711601 0.55078125\/0.86178646560355965 0.5625\/0.86786644586008233 0.57421875\/0.87375121895320629 0.5859375\/0.87944607321945378 0.59765625\/0.88495629699534695 0.609375\/0.89028717861740791 0.62109375\/0.89544400642215893 0.6328125\/0.90043206874612158 0.64453125\/0.90525665392581867 0.65625\/0.9099230502977721 0.66796875\/0.91443654619850423 0.6796875\/0.91880242996453687 0.69140625\/0.92302598993239249 0.703125\/0.92711251443859277 0.71484375\/0.93106729181966053 0.7265625\/0.93489561041211733 0.73828125\/0.93860275855248565 0.75\/0.94219402457728751 0.76171875\/0.94567469682304517 0.7734375\/0.94905006362628086 0.78515625\/0.95232541332351639 0.796875\/0.95550603425127423 0.80859375\/0.9585972147460764 0.8203125\/0.96160424314444504 0.83203125\/0.96453240778290228 0.84375\/0.96738699699797048 0.85546875\/0.97017329912617156 0.8671875\/0.97289660250402765 0.87890625\/0.97556219546806111 0.890625\/0.97817536635479407 0.90234375\/0.98074140350074845 0.9140625\/0.98326559524244661 0.92578125\/0.98575322991641046 0.9375\/0.98820959585916268 0.94921875\/0.99063998140722487 0.9609375\/0.99304967489711937 0.97265625\/0.99544396466536833 0.984375\/0.9978281390484941 0.99609375\/1<\/p>\n<p>red<\/p>\n<p>0.0\/0 0.01171875\/0.011764705882352943 0.0234375\/0.023529411764705879 0.03515625\/0.035294117647058816 0.046875\/0.047058823529411764 0.05859375\/0.058823529411764712 0.0703125\/0.07058823529411766 0.08203125\/0.082352941176470587 0.09375\/0.094117647058823528 0.10546875\/0.10588235294117647 0.1171875\/0.11764705882352938 0.12890625\/0.12941176470588237 0.140625\/0.14117647058823532 0.15234375\/0.15294117647058825 0.1640625\/0.1647058823529412 0.17578125\/0.17647058823529413 0.1875\/0.18823529411764706 0.19921875\/0.20000000000000007 0.2109375\/0.21176470588235291 0.22265625\/0.22352941176470589 0.234375\/0.23529411764705882 0.24609375\/0.24705882352941175 0.2578125\/0.25882352941176473 0.26953125\/0.27058823529411768 0.28125\/0.28235294117647064 0.29296875\/0.29411764705882348 0.3046875\/0.30588235294117649 0.31640625\/0.31764705882352934 0.328125\/0.3294117647058824 0.33984375\/0.3411764705882353 0.3515625\/0.35294117647058826 0.36328125\/0.3647058823529411 0.375\/0.37647058823529411 0.38671875\/0.38823529411764712 0.3984375\/0.39999999999999997 0.41015625\/0.41176470588235292 0.421875\/0.42352941176470582 0.43359375\/0.43529411764705883 0.4453125\/0.44705882352941184 0.45703125\/0.45882352941176474 0.46875\/0.47058823529411764 0.48046875\/0.48235294117647054 0.4921875\/0.49411764705882355 0.50390625\/0.50588235294117645 0.515625\/0.51764705882352946 0.52734375\/0.52941176470588236 0.5390625\/0.54117647058823526 0.55078125\/0.55294117647058827 0.5625\/0.56470588235294117 0.57421875\/0.57647058823529407 0.5859375\/0.58823529411764708 0.59765625\/0.59999999999999998 0.609375\/0.61176470588235299 0.62109375\/0.62352941176470589 0.6328125\/0.63529411764705879 0.64453125\/0.6470588235294118 0.65625\/0.65882352941176481 0.66796875\/0.6705882352941176 0.6796875\/0.68235294117647061 0.69140625\/0.69411764705882351 0.703125\/0.70588235294117663 0.71484375\/0.71764705882352942 0.7265625\/0.7294117647058822 0.73828125\/0.74117647058823533 0.75\/0.75294117647058822 0.76171875\/0.76470588235294112 0.7734375\/0.77647058823529425 0.78515625\/0.78823529411764703 0.796875\/0.80000000000000004 0.80859375\/0.81176470588235294 0.8203125\/0.82352941176470584 0.83203125\/0.83529411764705874 0.84375\/0.84705882352941175 0.85546875\/0.85882352941176465 0.8671875\/0.87058823529411766 0.87890625\/0.88235294117647056 0.890625\/0.89411764705882357 0.90234375\/0.90588235294117636 0.9140625\/0.91764705882352937 0.92578125\/0.92941176470588238 0.9375\/0.94117647058823528 0.94921875\/0.95294117647058818 0.9609375\/0.96470588235294119 0.97265625\/0.97647058823529409 0.984375\/0.98823529411764721 0.99609375\/1<\/p>\n<p>green<\/p>\n<p>0.0\/0 0.01171875\/0.011764705882352943 0.0234375\/0.023529411764705879 0.03515625\/0.035294117647058816 0.046875\/0.047058823529411764 0.05859375\/0.058823529411764712 0.0703125\/0.07058823529411766 0.08203125\/0.082352941176470587 0.09375\/0.094117647058823528 0.10546875\/0.10588235294117647 0.1171875\/0.11764705882352938 0.12890625\/0.12941176470588237 0.140625\/0.14117647058823532 0.15234375\/0.15294117647058825 0.1640625\/0.1647058823529412 0.17578125\/0.17647058823529413 0.1875\/0.18823529411764706 0.19921875\/0.20000000000000007 0.2109375\/0.21176470588235291 0.22265625\/0.22352941176470589 0.234375\/0.23529411764705882 0.24609375\/0.24705882352941175 0.2578125\/0.25882352941176473 0.26953125\/0.27058823529411768 0.28125\/0.28235294117647064 0.29296875\/0.29411764705882348 0.3046875\/0.30588235294117649 0.31640625\/0.31764705882352934 0.328125\/0.3294117647058824 0.33984375\/0.3411764705882353 0.3515625\/0.35294117647058826 0.36328125\/0.3647058823529411 0.375\/0.37647058823529411 0.38671875\/0.38823529411764712 0.3984375\/0.39999999999999997 0.41015625\/0.41176470588235292 0.421875\/0.42352941176470582 0.43359375\/0.43529411764705883 0.4453125\/0.44705882352941184 0.45703125\/0.45882352941176474 0.46875\/0.47058823529411764 0.48046875\/0.48235294117647054 0.4921875\/0.49411764705882355 0.50390625\/0.50588235294117645 0.515625\/0.51764705882352946 0.52734375\/0.52941176470588236 0.5390625\/0.54117647058823526 0.55078125\/0.55294117647058827 0.5625\/0.56470588235294117 0.57421875\/0.57647058823529407 0.5859375\/0.58823529411764708 0.59765625\/0.59999999999999998 0.609375\/0.61176470588235299 0.62109375\/0.62352941176470589 0.6328125\/0.63529411764705879 0.64453125\/0.6470588235294118 0.65625\/0.65882352941176481 0.66796875\/0.6705882352941176 0.6796875\/0.68235294117647061 0.69140625\/0.69411764705882351 0.703125\/0.70588235294117663 0.71484375\/0.71764705882352942 0.7265625\/0.7294117647058822 0.73828125\/0.74117647058823533 0.75\/0.75294117647058822 0.76171875\/0.76470588235294112 0.7734375\/0.77647058823529425 0.78515625\/0.78823529411764703 0.796875\/0.80000000000000004 0.80859375\/0.81176470588235294 0.8203125\/0.82352941176470584 0.83203125\/0.83529411764705874 0.84375\/0.84705882352941175 0.85546875\/0.85882352941176465 0.8671875\/0.87058823529411766 0.87890625\/0.88235294117647056 0.890625\/0.89411764705882357 0.90234375\/0.90588235294117636 0.9140625\/0.91764705882352937 0.92578125\/0.92941176470588238 0.9375\/0.94117647058823528 0.94921875\/0.95294117647058818 0.9609375\/0.96470588235294119 0.97265625\/0.97647058823529409 0.984375\/0.98823529411764721 0.99609375\/1<\/p>\n<p>blue<\/p>\n<p>0.0\/0 0.01171875\/0.011764705882352943 0.0234375\/0.023529411764705879 0.03515625\/0.035294117647058816 0.046875\/0.047058823529411764 0.05859375\/0.058823529411764712 0.0703125\/0.07058823529411766 0.08203125\/0.082352941176470587 0.09375\/0.094117647058823528 0.10546875\/0.10588235294117647 0.1171875\/0.11764705882352938 0.12890625\/0.12941176470588237 0.140625\/0.14117647058823532 0.15234375\/0.15294117647058825 0.1640625\/0.1647058823529412 0.17578125\/0.17647058823529413 0.1875\/0.18823529411764706 0.19921875\/0.20000000000000007 0.2109375\/0.21176470588235291 0.22265625\/0.22352941176470589 0.234375\/0.23529411764705882 0.24609375\/0.24705882352941175 0.2578125\/0.25882352941176473 0.26953125\/0.27058823529411768 0.28125\/0.28235294117647064 0.29296875\/0.29411764705882348 0.3046875\/0.30588235294117649 0.31640625\/0.31764705882352934 0.328125\/0.3294117647058824 0.33984375\/0.3411764705882353 0.3515625\/0.35294117647058826 0.36328125\/0.3647058823529411 0.375\/0.37647058823529411 0.38671875\/0.38823529411764712 0.3984375\/0.39999999999999997 0.41015625\/0.41176470588235292 0.421875\/0.42352941176470582 0.43359375\/0.43529411764705883 0.4453125\/0.44705882352941184 0.45703125\/0.45882352941176474 0.46875\/0.47058823529411764 0.48046875\/0.48235294117647054 0.4921875\/0.49411764705882355 0.50390625\/0.50588235294117645 0.515625\/0.51764705882352946 0.52734375\/0.52941176470588236 0.5390625\/0.54117647058823526 0.55078125\/0.55294117647058827 0.5625\/0.56470588235294117 0.57421875\/0.57647058823529407 0.5859375\/0.58823529411764708 0.59765625\/0.59999999999999998 0.609375\/0.61176470588235299 0.62109375\/0.62352941176470589 0.6328125\/0.63529411764705879 0.64453125\/0.6470588235294118 0.65625\/0.65882352941176481 0.66796875\/0.6705882352941176 0.6796875\/0.68235294117647061 0.69140625\/0.69411764705882351 0.703125\/0.70588235294117663 0.71484375\/0.71764705882352942 0.7265625\/0.7294117647058822 0.73828125\/0.74117647058823533 0.75\/0.75294117647058822 0.76171875\/0.76470588235294112 0.7734375\/0.77647058823529425 0.78515625\/0.78823529411764703 0.796875\/0.80000000000000004 0.80859375\/0.81176470588235294 0.8203125\/0.82352941176470584 0.83203125\/0.83529411764705874 0.84375\/0.84705882352941175 0.85546875\/0.85882352941176465 0.8671875\/0.87058823529411766 0.87890625\/0.88235294117647056 0.890625\/0.89411764705882357 0.90234375\/0.90588235294117636 0.9140625\/0.91764705882352937 0.92578125\/0.92941176470588238 0.9375\/0.94117647058823528 0.94921875\/0.95294117647058818 0.9609375\/0.96470588235294119 0.97265625\/0.97647058823529409 0.984375\/0.98823529411764721 0.99609375\/1<\/p>\n<p>alpha<\/p>\n<p>0.0\/0 0.01171875\/0.011764705882352943 0.0234375\/0.023529411764705879 0.03515625\/0.035294117647058816 0.046875\/0.047058823529411764 0.05859375\/0.058823529411764712 0.0703125\/0.07058823529411766 0.08203125\/0.082352941176470587 0.09375\/0.094117647058823528 0.10546875\/0.10588235294117647 0.1171875\/0.11764705882352938 0.12890625\/0.12941176470588237 0.140625\/0.14117647058823532 0.15234375\/0.15294117647058825 0.1640625\/0.1647058823529412 0.17578125\/0.17647058823529413 0.1875\/0.18823529411764706 0.19921875\/0.20000000000000007 0.2109375\/0.21176470588235291 0.22265625\/0.22352941176470589 0.234375\/0.23529411764705882 0.24609375\/0.24705882352941175 0.2578125\/0.25882352941176473 0.26953125\/0.27058823529411768 0.28125\/0.28235294117647064 0.29296875\/0.29411764705882348 0.3046875\/0.30588235294117649 0.31640625\/0.31764705882352934 0.328125\/0.3294117647058824 0.33984375\/0.3411764705882353 0.3515625\/0.35294117647058826 0.36328125\/0.3647058823529411 0.375\/0.37647058823529411 0.38671875\/0.38823529411764712 0.3984375\/0.39999999999999997 0.41015625\/0.41176470588235292 0.421875\/0.42352941176470582 0.43359375\/0.43529411764705883 0.4453125\/0.44705882352941184 0.45703125\/0.45882352941176474 0.46875\/0.47058823529411764 0.48046875\/0.48235294117647054 0.4921875\/0.49411764705882355 0.50390625\/0.50588235294117645 0.515625\/0.51764705882352946 0.52734375\/0.52941176470588236 0.5390625\/0.54117647058823526 0.55078125\/0.55294117647058827 0.5625\/0.56470588235294117 0.57421875\/0.57647058823529407 0.5859375\/0.58823529411764708 0.59765625\/0.59999999999999998 0.609375\/0.61176470588235299 0.62109375\/0.62352941176470589 0.6328125\/0.63529411764705879 0.64453125\/0.6470588235294118 0.65625\/0.65882352941176481 0.66796875\/0.6705882352941176 0.6796875\/0.68235294117647061 0.69140625\/0.69411764705882351 0.703125\/0.70588235294117663 0.71484375\/0.71764705882352942 0.7265625\/0.7294117647058822 0.73828125\/0.74117647058823533 0.75\/0.75294117647058822 0.76171875\/0.76470588235294112 0.7734375\/0.77647058823529425 0.78515625\/0.78823529411764703 0.796875\/0.80000000000000004 0.80859375\/0.81176470588235294 0.8203125\/0.82352941176470584 0.83203125\/0.83529411764705874 0.84375\/0.84705882352941175 0.85546875\/0.85882352941176465 0.8671875\/0.87058823529411766 0.87890625\/0.88235294117647056 0.890625\/0.89411764705882357 0.90234375\/0.90588235294117636 0.9140625\/0.91764705882352937 0.92578125\/0.92941176470588238 0.9375\/0.94117647058823528 0.94921875\/0.95294117647058818 0.9609375\/0.96470588235294119 0.97265625\/0.97647058823529409 0.984375\/0.98823529411764721 0.99609375\/1<\/p>\n<p><\/textarea><br \/>\n &#8230;\n<\/li>\n<li>which formed most of the final <a target=\"_blank\" href='https:\/\/hhsprings.bitbucket.io\/docs\/programming\/examples\/ffmpeg\/manipulating_video_colors\/curves.html' title='curves &#8212; ffmpeg examples' rel=\"noopener\">curves &#8212; ffmpeg examples<\/a> inspired ffmpeg command &#8230;<br \/>\n<code><br \/>\nffmpeg -y -i brush__turkey.m4v -filter_complex \"<br \/>\n[0:v]<br \/>\ncurves=<br \/>\nmaster='0.0\/0 0.01171875\/0.033751864777061671 0.0234375\/0.067435644319434537 0.03515625\/0.10098325339242978 0.046875\/0.1343266067613586 0.05859375\/0.16739761919153215 0.0703125\/0.20012820544826168 0.08203125\/0.23245028029685835 0.09375\/0.26429575850263332 0.10546875\/0.29559655483089792 0.1171875\/0.32628458404696314 0.12890625\/0.35629176091614018 0.140625\/0.38555000020374036 0.15234375\/0.41399121667507488 0.1640625\/0.44154732509545486 0.17578125\/0.46815024023019147 0.1875\/0.49373187684459596 0.19921875\/0.51822414970397945 0.2109375\/0.54155897357365324 0.22265625\/0.56366826321892849 0.234375\/0.58448393340511628 0.24609375\/0.6039378988975278 0.2578125\/0.62196207446147445 0.26953125\/0.63848837486226717 0.28125\/0.65344871486521738 0.29296875\/0.66677500923563593 0.3046875\/0.67964838149075235 0.31640625\/0.6910493179152648 0.328125\/0.70214399210941336 0.33984375\/0.71293769240972005 0.3515625\/0.72343570715270744 0.36328125\/0.73364332467489723 0.375\/0.74356583331281156 0.38671875\/0.75320852140297312 0.3984375\/0.76257667728190348 0.41015625\/0.77167558928612512 0.421875\/0.78051054575216006 0.43359375\/0.78908683501653032 0.4453125\/0.7974097454157586 0.45703125\/0.80548456528636625 0.46875\/0.81331658296487608 0.48046875\/0.82091108678780988 0.4921875\/0.82827336509169003 0.50390625\/0.83540870621303842 0.515625\/0.84232239848837742 0.52734375\/0.84901973025422939 0.5390625\/0.85550598984711601 0.55078125\/0.86178646560355965 0.5625\/0.86786644586008233 0.57421875\/0.87375121895320629 0.5859375\/0.87944607321945378 0.59765625\/0.88495629699534695 0.609375\/0.89028717861740791 0.62109375\/0.89544400642215893 0.6328125\/0.90043206874612158 0.64453125\/0.90525665392581867 0.65625\/0.9099230502977721 0.66796875\/0.91443654619850423 0.6796875\/0.91880242996453687 0.69140625\/0.92302598993239249 0.703125\/0.92711251443859277 0.71484375\/0.93106729181966053 0.7265625\/0.93489561041211733 0.73828125\/0.93860275855248565 0.75\/0.94219402457728751 0.76171875\/0.94567469682304517 0.7734375\/0.94905006362628086 0.78515625\/0.95232541332351639 0.796875\/0.95550603425127423 0.80859375\/0.9585972147460764 0.8203125\/0.96160424314444504 0.83203125\/0.96453240778290228 0.84375\/0.96738699699797048 0.85546875\/0.97017329912617156 0.8671875\/0.97289660250402765 0.87890625\/0.97556219546806111 0.890625\/0.97817536635479407 0.90234375\/0.98074140350074845 0.9140625\/0.98326559524244661 0.92578125\/0.98575322991641046 0.9375\/0.98820959585916268 0.94921875\/0.99063998140722487 0.9609375\/0.99304967489711937 0.97265625\/0.99544396466536833 0.984375\/0.9978281390484941 0.99609375\/1\":red=\"0.0\/0 0.01171875\/0.011764705882352943 0.0234375\/0.023529411764705879 0.03515625\/0.035294117647058816 0.046875\/0.047058823529411764 0.05859375\/0.058823529411764712 0.0703125\/0.07058823529411766 0.08203125\/0.082352941176470587 0.09375\/0.094117647058823528 0.10546875\/0.10588235294117647 0.1171875\/0.11764705882352938 0.12890625\/0.12941176470588237 0.140625\/0.14117647058823532 0.15234375\/0.15294117647058825 0.1640625\/0.1647058823529412 0.17578125\/0.17647058823529413 0.1875\/0.18823529411764706 0.19921875\/0.20000000000000007 0.2109375\/0.21176470588235291 0.22265625\/0.22352941176470589 0.234375\/0.23529411764705882 0.24609375\/0.24705882352941175 0.2578125\/0.25882352941176473 0.26953125\/0.27058823529411768 0.28125\/0.28235294117647064 0.29296875\/0.29411764705882348 0.3046875\/0.30588235294117649 0.31640625\/0.31764705882352934 0.328125\/0.3294117647058824 0.33984375\/0.3411764705882353 0.3515625\/0.35294117647058826 0.36328125\/0.3647058823529411 0.375\/0.37647058823529411 0.38671875\/0.38823529411764712 0.3984375\/0.39999999999999997 0.41015625\/0.41176470588235292 0.421875\/0.42352941176470582 0.43359375\/0.43529411764705883 0.4453125\/0.44705882352941184 0.45703125\/0.45882352941176474 0.46875\/0.47058823529411764 0.48046875\/0.48235294117647054 0.4921875\/0.49411764705882355 0.50390625\/0.50588235294117645 0.515625\/0.51764705882352946 0.52734375\/0.52941176470588236 0.5390625\/0.54117647058823526 0.55078125\/0.55294117647058827 0.5625\/0.56470588235294117 0.57421875\/0.57647058823529407 0.5859375\/0.58823529411764708 0.59765625\/0.59999999999999998 0.609375\/0.61176470588235299 0.62109375\/0.62352941176470589 0.6328125\/0.63529411764705879 0.64453125\/0.6470588235294118 0.65625\/0.65882352941176481 0.66796875\/0.6705882352941176 0.6796875\/0.68235294117647061 0.69140625\/0.69411764705882351 0.703125\/0.70588235294117663 0.71484375\/0.71764705882352942 0.7265625\/0.7294117647058822 0.73828125\/0.74117647058823533 0.75\/0.75294117647058822 0.76171875\/0.76470588235294112 0.7734375\/0.77647058823529425 0.78515625\/0.78823529411764703 0.796875\/0.80000000000000004 0.80859375\/0.81176470588235294 0.8203125\/0.82352941176470584 0.83203125\/0.83529411764705874 0.84375\/0.84705882352941175 0.85546875\/0.85882352941176465 0.8671875\/0.87058823529411766 0.87890625\/0.88235294117647056 0.890625\/0.89411764705882357 0.90234375\/0.90588235294117636 0.9140625\/0.91764705882352937 0.92578125\/0.92941176470588238 0.9375\/0.94117647058823528 0.94921875\/0.95294117647058818 0.9609375\/0.96470588235294119 0.97265625\/0.97647058823529409 0.984375\/0.98823529411764721 0.99609375\/1\":green=\"0.0\/0 0.01171875\/0.011764705882352943 0.0234375\/0.023529411764705879 0.03515625\/0.035294117647058816 0.046875\/0.047058823529411764 0.05859375\/0.058823529411764712 0.0703125\/0.07058823529411766 0.08203125\/0.082352941176470587 0.09375\/0.094117647058823528 0.10546875\/0.10588235294117647 0.1171875\/0.11764705882352938 0.12890625\/0.12941176470588237 0.140625\/0.14117647058823532 0.15234375\/0.15294117647058825 0.1640625\/0.1647058823529412 0.17578125\/0.17647058823529413 0.1875\/0.18823529411764706 0.19921875\/0.20000000000000007 0.2109375\/0.21176470588235291 0.22265625\/0.22352941176470589 0.234375\/0.23529411764705882 0.24609375\/0.24705882352941175 0.2578125\/0.25882352941176473 0.26953125\/0.27058823529411768 0.28125\/0.28235294117647064 0.29296875\/0.29411764705882348 0.3046875\/0.30588235294117649 0.31640625\/0.31764705882352934 0.328125\/0.3294117647058824 0.33984375\/0.3411764705882353 0.3515625\/0.35294117647058826 0.36328125\/0.3647058823529411 0.375\/0.37647058823529411 0.38671875\/0.38823529411764712 0.3984375\/0.39999999999999997 0.41015625\/0.41176470588235292 0.421875\/0.42352941176470582 0.43359375\/0.43529411764705883 0.4453125\/0.44705882352941184 0.45703125\/0.45882352941176474 0.46875\/0.47058823529411764 0.48046875\/0.48235294117647054 0.4921875\/0.49411764705882355 0.50390625\/0.50588235294117645 0.515625\/0.51764705882352946 0.52734375\/0.52941176470588236 0.5390625\/0.54117647058823526 0.55078125\/0.55294117647058827 0.5625\/0.56470588235294117 0.57421875\/0.57647058823529407 0.5859375\/0.58823529411764708 0.59765625\/0.59999999999999998 0.609375\/0.61176470588235299 0.62109375\/0.62352941176470589 0.6328125\/0.63529411764705879 0.64453125\/0.6470588235294118 0.65625\/0.65882352941176481 0.66796875\/0.6705882352941176 0.6796875\/0.68235294117647061 0.69140625\/0.69411764705882351 0.703125\/0.70588235294117663 0.71484375\/0.71764705882352942 0.7265625\/0.7294117647058822 0.73828125\/0.74117647058823533 0.75\/0.75294117647058822 0.76171875\/0.76470588235294112 0.7734375\/0.77647058823529425 0.78515625\/0.78823529411764703 0.796875\/0.80000000000000004 0.80859375\/0.81176470588235294 0.8203125\/0.82352941176470584 0.83203125\/0.83529411764705874 0.84375\/0.84705882352941175 0.85546875\/0.85882352941176465 0.8671875\/0.87058823529411766 0.87890625\/0.88235294117647056 0.890625\/0.89411764705882357 0.90234375\/0.90588235294117636 0.9140625\/0.91764705882352937 0.92578125\/0.92941176470588238 0.9375\/0.94117647058823528 0.94921875\/0.95294117647058818 0.9609375\/0.96470588235294119 0.97265625\/0.97647058823529409 0.984375\/0.98823529411764721 0.99609375\/1\":blue=\"0.0\/0 0.01171875\/0.011764705882352943 0.0234375\/0.023529411764705879 0.03515625\/0.035294117647058816 0.046875\/0.047058823529411764 0.05859375\/0.058823529411764712 0.0703125\/0.07058823529411766 0.08203125\/0.082352941176470587 0.09375\/0.094117647058823528 0.10546875\/0.10588235294117647 0.1171875\/0.11764705882352938 0.12890625\/0.12941176470588237 0.140625\/0.14117647058823532 0.15234375\/0.15294117647058825 0.1640625\/0.1647058823529412 0.17578125\/0.17647058823529413 0.1875\/0.18823529411764706 0.19921875\/0.20000000000000007 0.2109375\/0.21176470588235291 0.22265625\/0.22352941176470589 0.234375\/0.23529411764705882 0.24609375\/0.24705882352941175 0.2578125\/0.25882352941176473 0.26953125\/0.27058823529411768 0.28125\/0.28235294117647064 0.29296875\/0.29411764705882348 0.3046875\/0.30588235294117649 0.31640625\/0.31764705882352934 0.328125\/0.3294117647058824 0.33984375\/0.3411764705882353 0.3515625\/0.35294117647058826 0.36328125\/0.3647058823529411 0.375\/0.37647058823529411 0.38671875\/0.38823529411764712 0.3984375\/0.39999999999999997 0.41015625\/0.41176470588235292 0.421875\/0.42352941176470582 0.43359375\/0.43529411764705883 0.4453125\/0.44705882352941184 0.45703125\/0.45882352941176474 0.46875\/0.47058823529411764 0.48046875\/0.48235294117647054 0.4921875\/0.49411764705882355 0.50390625\/0.50588235294117645 0.515625\/0.51764705882352946 0.52734375\/0.52941176470588236 0.5390625\/0.54117647058823526 0.55078125\/0.55294117647058827 0.5625\/0.56470588235294117 0.57421875\/0.57647058823529407 0.5859375\/0.58823529411764708 0.59765625\/0.59999999999999998 0.609375\/0.61176470588235299 0.62109375\/0.62352941176470589 0.6328125\/0.63529411764705879 0.64453125\/0.6470588235294118 0.65625\/0.65882352941176481 0.66796875\/0.6705882352941176 0.6796875\/0.68235294117647061 0.69140625\/0.69411764705882351 0.703125\/0.70588235294117663 0.71484375\/0.71764705882352942 0.7265625\/0.7294117647058822 0.73828125\/0.74117647058823533 0.75\/0.75294117647058822 0.76171875\/0.76470588235294112 0.7734375\/0.77647058823529425 0.78515625\/0.78823529411764703 0.796875\/0.80000000000000004 0.80859375\/0.81176470588235294 0.8203125\/0.82352941176470584 0.83203125\/0.83529411764705874 0.84375\/0.84705882352941175 0.85546875\/0.85882352941176465 0.8671875\/0.87058823529411766 0.87890625\/0.88235294117647056 0.890625\/0.89411764705882357 0.90234375\/0.90588235294117636 0.9140625\/0.91764705882352937 0.92578125\/0.92941176470588238 0.9375\/0.94117647058823528 0.94921875\/0.95294117647058818 0.9609375\/0.96470588235294119 0.97265625\/0.97647058823529409 0.984375\/0.98823529411764721 0.99609375\/1'<br \/>\n[v]\" -map '[v]' -an <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/Mac\/brushturkey_better_colour.m4v' rel=\"noopener\">brushturkey_better_colour.m4v<\/a><br \/>\n<\/code>\n<\/li>\n<\/ol>\n<p> &#8230; was crucial to <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/Mac\/brushturkey_effects.gif\" rel=\"noopener\">our discoveries today<\/a> &#8230;<\/p>\n<ol>\n<li>fade in and fade out video effect &#8230;<br \/>\n<video style=\"width:100%;\" controls><source src='http:\/\/www.rjmprogramming.com.au\/Mac\/brushturkey_fadein_fadeout.m4v' type='video\/mp4'><\/source><\/video>\n<\/li>\n<li>colour balancing improvements regarding an underexposed video &#8230;<br \/>\n<video style=\"width:100%;\" controls><source src='http:\/\/www.rjmprogramming.com.au\/Mac\/brushturkey_better_colour.m4v' type='video\/mp4'><\/source><\/video>\n<\/li>\n<\/ol>\n<p>Further reading for you here, could involve &#8230;<\/p>\n<ul>\n<li><a target=\"_blank\" title='curves \u2014 ffmpeg examples' href='https:\/\/hhsprings.bitbucket.io\/docs\/programming\/examples\/ffmpeg\/manipulating_video_colors\/curves.html' rel=\"noopener\">curves \u2014 ffmpeg examples<\/a><\/li>\n<li><a target=\"_blank\" title='Converts GIMP colour curve to something the FFmpeg can read in the curve filter \u00b7 GitHub' href='https:\/\/gist.github.com\/carlosgeos\/02c8a6bfb06b6495e539bb855ddfe507' rel=\"noopener\">Converts GIMP colour curve to something the FFmpeg can read in the curve filter \u00b7 GitHub<\/a><\/li>\n<li><a target=\"_blank\" title='Top 20 best commands for FFmpeg' href='https:\/\/www.abyssale.com\/generate-video\/top-20-best-commands-for-ffmpeg' rel=\"noopener\">Top 20 best commands for FFmpeg<\/a><\/li>\n<li><a target=\"_blank\" title='Create video with 5 images with fadeIn\/out effect in ffmpeg' href='https:\/\/superuser.com\/questions\/833232\/create-video-with-5-images-with-fadein-out-effect-in-ffmpeg' rel=\"noopener\">Create video with 5 images with fadeIn\/out effect in ffmpeg<\/a><\/li>\n<li><a target=\"_blank\" title='ffmpeg Color Correction: Gamma, Brightness and Saturation' href='https:\/\/video.stackexchange.com\/questions\/20962\/ffmpeg-color-correction-gamma-brightness-and-saturation' rel=\"noopener\">ffmpeg Color Correction: Gamma, Brightness and Saturation<\/a><\/li>\n<li><a target=\"_blank\" title='Accidentally applied an \"incandescent light\" video filter on a video I filmed on my Sony RX100. Is there any way to remove or reverse this effect on the video?' href='https:\/\/www.reddit.com\/r\/photography\/comments\/2rel5e\/accidentally_applied_an_incandescent_light_video\/' rel=\"noopener\">Accidentally applied an &#8220;incandescent light&#8221; video filter on a video I filmed on my Sony RX100. Is there any way to remove or reverse this effect on the video?<\/a><\/li>\n<li><a target=\"_blank\" title='More Cool FFmpeg Tricks' href='https:\/\/www.opensourceforu.com\/2020\/11\/more-cool-ffmpeg-tricks\/' rel=\"noopener\">More Cool FFmpeg Tricks<\/a><\/li>\n<li><a target=\"_blank\" title='Creating Retro Glow Effects with FFmpeg' href='https:\/\/zayne.io\/articles\/retro-glow-effects-with-ffmpeg' rel=\"noopener\">Creating Retro Glow Effects with FFmpeg<\/a><\/li>\n<li><a target=\"_blank\" title='Is it possible to generate such effects purely with ffmpeg?' href='https:\/\/www.reddit.com\/r\/ffmpeg\/comments\/12pgxi1\/is_it_possible_to_generate_such_effects_purely\/' rel=\"noopener\">Is it possible to generate such effects purely with ffmpeg?<\/a><\/li>\n<li><a target=\"_blank\" title='Creating a retro glow effect with FFmpeg' href='https:\/\/www.reddit.com\/r\/ffmpeg\/comments\/im2mkp\/creating_a_retro_glow_effect_with_ffmpeg\/' rel=\"noopener\">Creating a retro glow effect with FFmpeg<\/a><\/li>\n<li><a target=\"_blank\" title='FFmpeg Filters Documentation' href='https:\/\/ffmpeg.org\/ffmpeg-filters.html' rel=\"noopener\">FFmpeg Filters Documentation<\/a><\/li>\n<\/ul>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/ffmpeg-video-overall-effects-tutorial\/' rel=\"noopener\">Ffmpeg Video Overall Effects Tutorial<\/a>.<\/p-->\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/ffmpeg-video-overall-effects-tutorial\/' rel=\"noopener\">Ffmpeg Video Overall Effects Tutorial<\/a>.<\/p-->\n<hr>\n<p id='fvsmt'>Previous relevant <a target=\"_blank\" title='Ffmpeg Video Subliminal Message Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/ffmpeg-video-subliminal-message-tutorial\/' rel=\"noopener\">Ffmpeg Video Subliminal Message Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/Mac\/brushturkey.gif\" rel=\"noopener\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Ffmpeg Video Subliminal Message Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/Mac\/brushturkey.gif\" title=\"Ffmpeg Video Subliminal Message Tutorial\" \/><\/a><p class=\"wp-caption-text\">Ffmpeg Video Subliminal Message Tutorial<\/p><\/div>\n<p>Revisiting the brilliant <a target=\"_blank\" title='ffmpeg' href='https:\/\/www.ffmpeg.org\/' rel=\"noopener\">ffmpeg<\/a>, as discussed at the recent <a title='Ffmpeg Install and Public Face Tutorial' href='#fipft'>Ffmpeg Install and Public Face Tutorial<\/a> &#8230;<\/p>\n<ul>\n<li>the other day we were reading the excellent <a target=\"_blank\" href='https:\/\/stackoverflow.com\/questions\/10957412\/fastest-way-to-extract-frames-using-ffmpeg' title='Fastest way to extract frames using ffmpeg?' rel=\"noopener\">Fastest way to extract frames using ffmpeg?<\/a> and noted it down for a future discussion &#8230; and then today &#8230;<\/li>\n<li>we were inspired by a Brush Turkey which we video<sub>ed<\/sub> via an iPhone&#8217;s Camera app&#8217;s Video mode of capture option &#8230;<\/li>\n<li>downloaded to this MacBook Air (via AirDrop &#8230; good for Apple sharing when the sizes get big &#8230; raw video 1:19s long)<\/li>\n<\/ul>\n<p>And that&#8217;s where we are at here, thinking this would be a good opportunity to try creating a Subliminal Message video.  But before we go on and &#8220;give the game away&#8221; you may want to see the result of our <i>Subliminal Message insertion via ffmpeg<\/i> theme to our work, in action, below.  Unlock or give up to unlock the content below the video quiz below &#8230;<\/p>\n<table>\n<tr>\n<th colspan=1>What is the secret word?  <input style=display:inline-block; title='?' onblur=\"if (this.value.toLowerCase().replace('give up','glockenspiel') == 'glockenspiel') { document.getElementById('morestuff').style.visibility='visible'; location.href='#morestuff';  }\" placeholder='Your guess or give up ...' value=''><\/input><\/th>\n<\/tr>\n<tr>\n<th>Raw video &#8230; to it&#8217;s slides &#8230;<\/th>\n<\/tr>\n<tr>\n<th>ffmpeg -i <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/Mac\/IMG_2784.MOV' rel=\"noopener\">..\/IMG_2784.MOV<\/a> -r 1\/1 %03d.jpg <br \/>ffmpeg -i %03d.jpg <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/Mac\/brush_turkey.m4v' rel=\"noopener\">brush_turkey.m4v<\/a><\/th>\n<\/tr>\n<tr>\n<td>\n<video style=\"width:100%;\" controls><source src='http:\/\/www.rjmprogramming.com.au\/Mac\/brush_turkey.m4v' type='video\/mp4'><\/source><\/video>\n<\/td>\n<td><\/tr>\n<tr>\n<th>Hard guess?<\/th>\n<\/tr>\n<tr>\n<th>ffmpeg -r 8 -i %03d.jpg <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/Mac\/brush-turkey.m4v' rel=\"noopener\">brush-turkey.m4v<\/a><\/th>\n<\/tr>\n<tr>\n<td>\n<video style=\"width:100%;\" controls><source src='http:\/\/www.rjmprogramming.com.au\/Mac\/brush-turkey.m4v' type='video\/mp4'><\/source><\/video>\n<\/td>\n<td><\/tr>\n<tr>\n<th>Easier guess?<\/th>\n<\/tr>\n<tr>\n<th>ffmpeg -r 6 -i %03d.jpg <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/Mac\/brush__turkey.m4v' rel=\"noopener\">brush__turkey.m4v<\/a><\/th>\n<\/tr>\n<tr>\n<td>\n<video style=\"width:100%;\" controls><source src='http:\/\/www.rjmprogramming.com.au\/Mac\/brush__turkey.m4v' type='video\/mp4'><\/source><\/video>\n<\/td>\n<\/tr>\n<\/table>\n<p id=morestuff style=visibility:hidden;>Congratulations!   Yes, in between the &#8220;Raw Video&#8221; ffmpeg work and onto the other ffmpeg commands we renamed one slide to a *.jpeg equivalent and then set about replacing the *.jpg original slide with our <i>Subliminal Message<\/i> slide, as you can see <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/Mac\/brushturkey.gif\" rel=\"noopener\">here<\/a>.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/ffmpeg-video-subliminal-message-tutorial\/' rel=\"noopener\">Ffmpeg Video Subliminal Message Tutorial<\/a>.<\/p-->\n<hr>\n<p id='fipft'>Previous relevant <a target=\"_blank\" title='Ffmpeg Install and Public Face Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/ffmpeg-install-and-public-face-tutorial\/' rel=\"noopener\">Ffmpeg Install and Public Face Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/ffmpeg_install_and_public_face.gif\" rel=\"noopener\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Ffmpeg Install and Public Face Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/ffmpeg_install_and_public_face.gif\" title=\"Ffmpeg Install and Public Face Tutorial\" \/><\/a><p class=\"wp-caption-text\">Ffmpeg Install and Public Face Tutorial<\/p><\/div>\n<p>Our recent web server VPS migration can not only be &#8230;<\/p>\n<ul>\n<li>a migration of functionality (eg. this WordPress blog) &#8230; as well as &#8230;<\/li>\n<li>an opportunity to open up new vistas of serverside functionality<\/li>\n<\/ul>\n<p> &#8230; such as today&#8217;s <a target=\"_blank\" title='ffmpeg' href='https:\/\/www.ffmpeg.org\/' rel=\"noopener\">ffmpeg<\/a> install, which is only feasible because of the &#8230;<\/p>\n<ul>\n<li>additional diskspace &#8230; chance on new web server allows for &#8230;<\/li>\n<li>chance to install ffmpeg &#8230;<br \/>\n<code><br \/>\ndnf config-manager --set-enabled powertools<br \/>\ndnf install --nogpgcheck https:\/\/mirrors.rpmfusion.org\/free\/el\/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm -y<br \/>\ndnf install --nogpgcheck https:\/\/mirrors.rpmfusion.org\/nonfree\/el\/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm -y<br \/>\ndnf install ffmpeg<br \/>\n <\/code><br \/>\n &#8230; thanks to <a target=\"_blank\" title='ffmpeg install info' href='https:\/\/serverfault.com\/questions\/1129671\/almalinux-cannot-install-ffmpeg' rel=\"noopener\">this great link<\/a>, along with ImageMagick &#8230;<\/li>\n<\/ul>\n<p> &#8230; on this new &#8220;public face&#8221; (even more public when DNS is applied later).<\/p>\n<p>Codewise this involved &#8230;<\/p>\n<ul>\n<li><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/macos_ffmpeg_convert.php----------GETME\" rel=\"noopener\">the changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/macos_ffmpeg_convert.php----------GETME\" rel=\"noopener\">macos_ffmpeg_convert.php<\/a> works <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/macos_ffmpeg_convert.php\" rel=\"noopener\">the old way<\/a> and now in <a target=\"_blank\" href=\"https:\/\/65.254.95.247\/macos_ffmpeg_convert.php\" rel=\"noopener\">the new way<\/a> &#8230; and is helped out by &#8230;<\/li>\n<li><a target=\"_blank\" href='https:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/client_browsing.html-----------------------------------------GETME' rel=\"noopener\">a tweaked<\/a> <a target=\"_blank\" href='https:\/\/www.rjmprogramming.com.au\/HTMLCSS\/client_browsing.html-----------------------------------------GETME' rel=\"noopener\">client_browsing.htm<\/a> client side HTML and Javascript inhouse helper<\/li>\n<\/ul>\n<p> &#8230; further to recent work touching these ideas with <a title='Animated GIF Creator Overlayed Images Top Left Tutorial' href='#agifcoitlt'>Animated GIF Creator Overlayed Images Top Left Tutorial<\/a>.<\/p>\n<p>See some of this public install of ffmpeg <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/ffmpeg_install_and_public_face.gif\" rel=\"noopener\">here<\/a>.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/ffmpeg-install-and-public-face-tutorial\/' rel=\"noopener\">Ffmpeg Install and Public Face Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifcoitlt'>Previous relevant <a target=\"_blank\" title='Animated GIF Creator Overlayed Images Top Left Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-overlayed-images-top-left-tutorial\/' rel=\"noopener\">Animated GIF Creator Overlayed Images Top Left Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Animated GIF Creator Overlayed Images Top Left Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/add_topleft.jpg\" title=\"Animated GIF Creator Overlayed Images Top Left Tutorial\" \/><\/a><p class=\"wp-caption-text\">Animated GIF Creator Overlayed Images Top Left Tutorial<\/p><\/div>\n<p>To add to the recent <a title='Animated GIF Creator Overlayed Images Tutorial' href='#agifcoit'>Animated GIF Creator Overlayed Images Tutorial<\/a>&#8216;s user interaction logic, we add a way to control those two &#8220;overlay&#8221; CSS properties &#8230;<\/p>\n<ul>\n<li>left<\/li>\n<li>top<\/li>\n<\/ul>\n<p> &#8230; but more in the sense that we allow CSS &#8230;<\/p>\n<ul>\n<li>margin-eft<\/li>\n<li>margin-top<\/li>\n<\/ul>\n<p> &#8230; come into the picture, after a dalliance with CSS  <a target=\"_blank\" title='CSS3 calc information' href='https:\/\/www.htmlgoodies.com\/html5\/css\/using-the-css3-calc-function.html' rel=\"noopener\">calc<\/a> thoughts.<\/p>\n<p>This allows for offsetted images be part of the &#8220;overlay mix&#8221; that you can retry this at <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-----------------------------------------------------GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-----------------------------------------------------GETME\" rel=\"noopener\">tutorial_to_animated_gif.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator' rel=\"noopener\">public domain Animated GIF Creator<\/a>.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-overlayed-images-top-left-tutorial\/' rel=\"noopener\">Animated GIF Creator Overlayed Images Top Left Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifcoit'>Previous relevant <a target=\"_blank\" title='Animated GIF Creator Overlayed Images Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-overlayed-images-tutorial\/' rel=\"noopener\">Animated GIF Creator Overlayed Images Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Animated GIF Creator Overlayed Images Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/ttag_overlay.jpg\" title=\"Animated GIF Creator Overlayed Images Tutorial\" \/><\/a><p class=\"wp-caption-text\">Animated GIF Creator Overlayed Images Tutorial<\/p><\/div>\n<p>We wanted to add an &#8220;Overlayed Images&#8221; functionality component to the &#8220;Animated GIF Creator&#8221; of <a title='Animated GIF Creator Video Intranet Tutorial' href='#agifcvit'>Animated GIF Creator Video Intranet Tutorial<\/a>, today.<\/p>\n<p>The work involves both of the HTML design &#8220;big concepts&#8221; we are keen on at this blog &#8230;<\/p>\n<ul>\n<li>overlay &#8230; via CSS <font color=blue>control of<\/font> &#8230;\n<ol>\n<li>position:absolute;top:<font color=blue>0px<\/font>;left:<font color=blue>0px<\/font>;<\/li>\n<li>opacity:<font color=blue>1.0<\/font>;<\/li>\n<li>z-index:<font color=blue>1<\/font>;<\/li>\n<\/ol>\n<\/li>\n<li>reveal &#8230; lately, mostly, via HTML use of &#8230;\n<ol>\n<li>details<\/li>\n<li>summary<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<p> &#8230; the latter being the &#8220;container&#8221; for our interactive input be able to control overlay items 2 and 3, which affect the &#8220;overlayed images&#8221; output display via the clicking of a new &#8220;Overlay Images&#8221; button.  That button &#8230;<\/p>\n<p><code><br \/>\n&lt;input disabled onclick=\"overlaythem();\" id=\"overlayit\" type=\"button\" title='Overlay Images' value='Overlay Images'&gt;&lt;\/input&gt;<br \/>\n<\/code><\/p>\n<p> &#8230; starts off as <i>disabled<\/i> &#8230; and works with new HTML div elements &#8230;<\/p>\n<p><code><br \/>\n&lt;div id=overlayedj&gt;&lt;h1&gt;&amp;nbsp;&lt;\/h1&gt;&lt;br&gt;&lt;\/div&gt;&lt;div id=overlayedi&gt;&lt;\/div&gt;<br \/>\n<\/code><\/p>\n<p> &#8230; until at least two images are defined, at which time the button becomes enabled &#8230;<\/p>\n<p><code><br \/>\nfunction onfit(ithis) {<br \/>\n  if (ithis.value == '' && ('' + ithis.placeholder).indexOf(']') != -1) {<br \/>\n    ithis.value=('' + ithis.placeholder).split('[')[1].split(']')[0];<br \/>\n  }<br \/>\n  ithis.type='number';<br \/>\n}<br \/>\n<br \/>\nfunction overlayds(inm, newop, newzi) {<br \/>\n  var outdets='';<br \/>\n  var divrect=null;<br \/>\n  var poslt=' data-style=\\\"position:absolute;left:px;top:px;\\\" ';<br \/>\n  var reposit='';<br \/>\n  if (!document.getElementById('detsum' + ('' + inm))) {<br \/>\n    if (document.getElementById('overlayedi').innerHTML == '') {<br \/>\n       document.getElementById('overlayedi').title='Overlayed Images Below ... Click for It in New Window ...';<br \/>\n       document.getElementById('overlayedj').innerHTML='&lt;h1&gt;Overlayed Images Below ...&lt;\/h1&gt;&lt;br&gt;';<br \/>\n       divrect=document.getElementById('overlayedi').getBoundingClientRect();<br \/>\n       poslt=' data-style=\\\"position:absolute;left:' + ('' + divrect.left).split('.')[0].trim() + 'px;top:' + ('' + eval(200 + eval('' + ('' + divrect.top).split('.')[0]))).trim() + 'px;\\\" ';<br \/>\n    } else {<br \/>\n       poslt=' data-style=\\\"' + document.getElementById('detsum1').getAttribute('data-style') + '\\\" ';<br \/>\n    }<br \/>\n    outdets='&amp;nbsp;&amp;nbsp;&lt;details ' + poslt + ' id=\\\"detsum' + ('' + inm) + '\\\" style=\\\" display:inline-block; \\\" open&gt;&lt;summary id=\\\"sumdet' + ('' + inm) + '\\\"&gt;Overlay&lt;\/summary&gt;&lt;input onchange=overlayds(' + inm + ',this.value,String.fromCharCode(32)); onblur=overlayds(' + inm + ',this.value,String.fromCharCode(32)); type=text onfocus=onfit(this); id=\\\"opacity' + ('' + inm) + '\\\" style=\\\" display:inline-block; \\\" placeholder=\\\"Opacity [1.00]\\\" value=\\\"\\\" step=0.01 min=0.00 max=1.00&gt;&lt;\/input&gt;&lt;br&gt;&lt;input onfocus=onfit(this); onchange=overlayds(' + inm + ',String.fromCharCode(32),this.value); onblur=overlayds(' + inm + ',String.fromCharCode(32),this.value); type=text id=\\\"zindex' + ('' + inm) + '\\\" style=\\\" display:inline-block; \\\" placeholder=\\\"Z-Index [1]\\\" value=\\\"\\\" min==999 max=999 step=1&gt;&lt;\/input&gt;&lt;br&gt;&lt;\/details&gt;';<br \/>\n    reposit=poslt.replace(' data-',' ');<br \/>\n    reposit=reposit.replace('\\\"', '\\\"opacity:1.0;z-index:1;');<br \/>\n    if (document.getElementById('overlayedi').innerHTML == '') {<br \/>\n      document.getElementById('overlayedi').innerHTML='&lt;img id=\\\"imgdet' + ('' + inm) + '\\\" src=\\\"' + document.getElementById('slideshow' + ('' + inm).replace(\/^1$\/g,'')).value + '\\\" ' + reposit + '&gt;&lt;\/img&gt;';<br \/>\n      document.getElementById('overlayedi').style.width=('' + document.getElementById('imgdet' + ('' + inm)).width).replace('px','') + 'px';<br \/>\n      document.getElementById('overlayedi').style.height=('' + document.getElementById('imgdet' + ('' + inm)).height).replace('px','') + 'px';<br \/>\n      document.getElementById('overlayedi').onclick = function(){ var woo=window.open('','_blank','top=100,left=100,width=' + document.getElementById('overlayedi').style.width.replace('px','') + ',height=' + document.getElementById('overlayedi').style.height.replace('px',''));  woo.document.write('&lt;html&gt;&lt;head&gt;&lt;title&gt;Overlayed Images Below ...&lt;\/title&gt;&lt;\/head&gt;&lt;body&gt;' + document.getElementById('overlayedi').outerHTML.replace(\/left\\:[\\ ]*\/g,'left:0.0').replace(\/top\\:[\\ ]*\/g,'top:0.0') + '&lt;\/body&gt;&lt;\/html&gt;');   woo.document.title='Overlayed Images Below ...'; };<br \/>\n    } else {<br \/>\n      document.getElementById('overlayedi').innerHTML+='&lt;img id=\\\"imgdet' + ('' + inm) + '\\\" src=\\\"' + document.getElementById('slideshow' + ('' + inm).replace(\/^1$\/g,'')).value + '\\\" ' + reposit + '&gt;&lt;\/img&gt;';<br \/>\n    }<br \/>\n  } else {<br \/>\n    document.getElementById('detsum' + ('' + inm)).style.display='inline-block';<br \/>\n    if (newop != ' ') {<br \/>\n    if (newop.trim() == '') {<br \/>\n    document.getElementById('imgdet' + inm).style.opacity='1.0';<br \/>\n    } else {<br \/>\n    document.getElementById('imgdet' + inm).style.opacity='' + newop;<br \/>\n    }<br \/>\n    }<br \/>\n    if (newz != ' ') {<br \/>\n    if (newz.trim() == '') {<br \/>\n    document.getElementById('imgdet' + inm).style.zIndex='1';<br \/>\n    } else {<br \/>\n    document.getElementById('imgdet' + inm).style.zIndex='' + newzi;<br \/>\n    }<br \/>\n    }<br \/>\n  }<br \/>\n  return outdets;<br \/>\n}<br \/>\n<br \/>\nfunction overlaythem() {<br \/>\n  var suffidea=1;<br \/>\n  while (document.getElementById('slideshow' + ('' + suffidea).replace(\/^1$\/g, '')).value != '') {<br \/>\n    document.getElementById('ours' + ('' + suffidea)).innerHTML+=overlayds(suffidea,'','');<br \/>\n    suffidea++;<br \/>\n  }<br \/>\n}<br \/>\n<\/code><\/p>\n<p>You can try this at <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php----------------------------------------------------GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php----------------------------------------------------GETME\" rel=\"noopener\">tutorial_to_animated_gif.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator' rel=\"noopener\">public domain Animated GIF Creator<\/a>.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-overlayed-images-tutorial\/' rel=\"noopener\">Animated GIF Creator Overlayed Images Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifcvit'>Previous relevant <a target=\"_blank\" title='Animated GIF Creator Video Intranet Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-video-intranet-tutorial\/' rel=\"noopener\">Animated GIF Creator Video Intranet Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Animated GIF Creator Video Intranet Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/video_mamp_ffmpeg.gif\" title=\"Animated GIF Creator Video Intranet Tutorial\" \/><\/a><p class=\"wp-caption-text\">Animated GIF Creator Video Intranet Tutorial<\/p><\/div>\n<p>With the recent <a href='#agifcvrt' title='Animated GIF Creator Video Revisit Tutorial'>Animated GIF Creator Video Revisit Tutorial<\/a> (preceding <a title='Animated GIF Creator Video Share Tutorial' href='#agifcvst'>Animated GIF Creator Video Share Tutorial<\/a>) we wrote &#8230;<\/p>\n<blockquote cite='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-video-revisit-tutorial\/'><p>\n &#8230; one reason being that we do not want to install the wonderful <a target=\"_blank\" title=\"ffmpeg\" href='https:\/\/www.ffmpeg.org\/' rel=\"noopener\">ffmpeg<\/a> (command line video creation tool) on the RJM Programming domain, but, in macOS, here with MAMP, we are quite happy to live with the <a target=\"_blank\" title=\"Homebrew\" href='https:\/\/brew.sh\/' rel=\"noopener\">Homebrew<\/a> (Terminal application&#8217;s) install &#8230;\n<\/p><\/blockquote>\n<p> &#8230; setting up what could be &#8220;lost functionality&#8221;, but today, we come around to either adding a new &#8230;<\/p>\n<p><code><br \/>\nConvert to Video<br \/>\n<\/code><\/p>\n<p> &#8230; dropdown option should all be ritchy ditch, and if not, often we will add new &#8220;Advice&#8221; dropdown options to remind the user what they&#8217;d need to arrange to get to a &#8220;Convert to Video&#8221; scenario.<\/p>\n<p>Selecting &#8220;Convert to Video&#8221; sets up a hydrid &#8220;Internet\/Intranet&#8221; feeling scenario where &#8230;<\/p>\n<ul>\n<li>the user is using <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-------------------------------------------GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-------------------------------------------GETME\" rel=\"noopener\">tutorial_to_animated_gif.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator' rel=\"noopener\">public domain Animated GIF Creator<\/a> containing this new &#8220;Convert to Video&#8221; option off the &#8220;ImageMagick&#8221; dropdown &#8230;<\/li>\n<li>the user defines some image slide data &#8230; eg. browsing to create data-URIs (but careful not to do too many) &#8230;<\/li>\n<li>the user selects that &#8220;Convert to Video&#8221; option &#8230;<\/li>\n<li>a window.open popup calls URL like &#8230;<br \/>\n<code>HTTP:\/\/localhost:8888\/PHP\/animegif\/tutorial_to_animated_gif.php?video=1687644<\/code><br \/>\n &#8230; in a new window &#8230;<\/li>\n<li>those data-URIs are converted into \/tmp\/jmtmp0*.[imageExt] files &#8230; ready for &#8230;<\/li>\n<li>ffmpeg commands like &#8230;<br \/>\n<code><br \/>\nffmpeg  -framerate 0.1  -i \/tmp\/jmtmp%03d.jpeg -c:v libvpx-vp9 -pix_fmt yuva420p -lossless 1 -c:a copy video.webm; ffmpeg -i  video.webm video.mov 2&gt;&gt; video.bad<br \/>\n<\/code><br \/>\n &#8230; be nested in PHP <a target=\"_blank\" href='https:\/\/www.php.net\/manual\/en\/function.exec.php' title='PHP exec' rel=\"noopener\">exec<\/a> (via  <a target=\"_blank\" title='MAMP' href='https:\/\/mamp.info' rel=\"noopener\">MAMP<\/a> local web server incarnation of the inhouse Animated GIF Creator) as a way to create videos &#8230;\n<\/li>\n<li>which can be downloaded within that public domain &#8220;parent&#8221; inhouse Animated GIF Creator session<\/li>\n<\/ul>\n<p>Which begs the question &#8230;<\/p>\n<p><code><br \/>\nHow do we know when to offer the \"Convert to Video\" option on that dropdown?<br \/>\n<\/code><\/p>\n<p>This logic is centred around a few useful ideas (with this cross domain scenario ruling out Ajax and Iframe src= definitions, as useful ways to go) &#8230;<\/p>\n<ol>\n<li>open the MAMP local web server &#8220;HTTP:\/\/localhost:8888\/PHP\/animegif\/tutorial_to_animated_gif.php&#8221; URLs in an iframe (with onload event logics) pointed at by a window.open second argument (effectively avoiding any loose useful or not popup windows hanging around) &#8230;<\/li>\n<li>the most we can ask at the receiver is that window.opener is defined &#8230; and if so, just at that discovery &#8230;<\/li>\n<li>an image called &#8220;amhere.jpg&#8221; is created via PHP GD functionality &#8230; and back at the &#8220;public domain&#8221; parent within the iframe onload logic (where with contentWindow or contentDocument do not expect a document.body or even a document) &#8230;<\/li>\n<li>we attempt to &#8220;hotlink&#8221; that MAMP local web server image &#8230; as per &#8230;<br \/>\n<code><br \/>\n            var tryit='http:\/\/localhost:8888\/PHP\/animegif\/amhere.jpg';<br \/>\n<br \/>\n            document.getElementById('ctvopt').value='advice';<br \/>\n            document.getElementById('ctvopt').innerHTML='Advice on Convert to Video';<br \/>\n<br \/>\n            if (tryit != '') {<br \/>\n            var im=new Image();<br \/>\n<br \/>\n    im.onload = function() {<br \/>\n            document.getElementById('ctvopt').value='video';<br \/>\n            console.log('this.height=' + eval('' + this.height));<br \/>\n            if (eval('' + this.height) &gt;= 20) {<br \/>\n            document.getElementById('ctvopt').innerHTML='Convert to Video';<br \/>\n            } else {<br \/>\n            document.getElementById('ctvopt').innerHTML='Convert to Video (but ffmpeg not installed or in unexpected place)';<br \/>\n            }<br \/>\n            document.getElementById('imsel').title='All except Convert to Video, which needs ffmpeg installed, use ImageMagick';<br \/>\n    };<br \/>\n<br \/> <br \/>\n            im.src=tryit;<br \/>\n            tryit='';<br \/>\n            }<br \/>\n<\/code>\n<\/li>\n<\/ol>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/new-animated-gif-creator-video-share-tutorial\/' rel=\"noopener\">New Animated GIF Creator Video Share Tutorial<\/a> ...<\/p>\n\n\n\n\n\n<hr>\n\n\n\n\n\n<p id='agifcvst'>Previous relevant <a target=\"_blank\" title='Animated GIF Creator Video Share Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-video-share-tutorial\/' rel=\"noopener\">Animated GIF Creator Video Share Tutorial<\/a> is shown below.<\/p>\n\n\n\n[caption id=\"\" align=\"alignnone\" width=\"220\" caption=\"Animated GIF Creator Video Share Tutorial\"]<a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Animated GIF Creator Video Share Tutorial\"  src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/postfix_bigsur.gif\" title=\"Animated GIF Creator Video Share Tutorial\" \/><\/a>[\/caption]\n\n\n\n<p>It's one thing to use macOS (via Big Sur, on this MacBook Air) <a target=\"_blank\" title='MAMP' href='https:\/\/mamp.info' rel=\"noopener\">MAMP<\/a> local web server to create animated GIFs and (derived) videos via an inhouse PHP web application, but another thing to go and share those videos out into the big wide online woooorrrrlllldddd, on top of yesterday's <a title='Animated GIF Creator Video Revisit Tutorial' href='#agifcvrt'>Animated GIF Creator Video Revisit Tutorial<\/a>'s progress.<\/p>\n\n\n\n\n\n<p>Sending emails via macOS Big Sur command line mechanisms is still possible, we found, via postfix via Gmail relay mechanisms, but you need to allow your Gmail account \"accept less secure apps\" to have anything happen with these email attempts.  But once this is fixed you can use any (installed) of ...<\/p>\n\n\n\n\n\n<ul>\n\n\n<li>sendmail<\/li>\n\n \n\n\n<li>mailx<\/li>\n\n \n\n\n<li>mail<\/li>\n\n \n<\/ul>\n\n\n\n\n\n<p> ... software (command) conduits, and use \"mailq\" and the macOS Console desktop application and perhaps \/var\/log logs to monitor and debug.<\/p>\n\n\n\n\n\n<p>So, what are the steps to get macOS postfix command line email sending working?  We consulted <a target=\"_blank\" title='Useful link' href='https:\/\/www.howtoforge.com\/tutorial\/configure-postfix-to-use-gmail-as-a-mail-relay\/#-enable-less-secure-apps-in-gmail' rel=\"noopener\">this excellent link<\/a>, thanks, and came up with, at least for us ...<\/p>\n\n\n\n\n\n<ol>\n\n\n<li><code>\n$ sudo vi \/etc\/postfix\/sasl_passwd\nAdd the line:\n<br \/>\n[smtp.gmail.com]:587    username@gmail.com:password\nSave and close the file. Your Gmail password is stored as plaintext, so make the file accessible only by root:\n<br \/>\n$ sudo chmod 600 \/etc\/postfix\/sasl_passwd\n<\/code>\n<\/li>\n\n\n\n\n<li><code>\n$ sudo vi \/etc\/postfix\/main.cf\n<br \/>\n# Add to bottom\n<br \/>\nrelayhost = [smtp.gmail.com]:587\nsmtp_sasl_auth_enable=yes\nsmtp_sasl_password_maps=hash:\/etc\/postfix\/sasl_passwd\nsmtp_sasl_mechanism_filter = AUTH LOGIN\nsmtp_sasl_security_options =\nsmtp_use_tls=yes\nsmtp_tls_security_level=encrypt\n<\/code>\n<\/li>\n\n\n\n\n<li><code>\n$ sudo postmap \/etc\/postfix\/sasl_passwd\n<\/code>\n<\/li>\n\n\n<\/li>\n\n\n\n\n<li><code>\n$ sudo postfix reload\n<\/code>\n<\/li>\n\n\n\n\n<li># In our <a target=\"_blank\" title=\"Gmail\" href='https:\/\/gmail.com' rel=\"noopener\">Gmail<\/a> account we went to the \"?\" help section and entered \"allow less secure\" to get to links whereby we (temporarily) started \"allowing less secure\" apps ...<\/li>\n\n\n\n\n<li># Monitoring and testing involved ...\n<code>\n$ echo -e \"Content-Type: text\/html\\nFrom: rmetcalfe@rjmprogramming.com.au\\nto:  rmetcalfe15@gmail.com\\ncc: rmetcalfe@rjmprogramming.com.au\\nSubject: First Date ps-ef world.php Report at `date`\\n\\n&lt;html&gt;&lt;head&gt;&lt;style&gt; tr:nth-child(even) {background-color: #CCC } tr:nth-child(odd) {background-color: #FFF } &lt;\/style&gt;&lt;\/head&gt;&lt;body&gt;&lt;h1&gt;First Date ps-ef world.php Report at `date`&lt;\/h1&gt;&lt;\/body&gt;&lt;\/html&gt;\" | $ sendmail -t -f rmetcalfe15@gmail.com\n$ mailq\n$ mailq\n$ cd PHP\/animegif\n$ cat  video.webm | uuencode 'video.webm' | mailx -s \"Video video\/webm from RJM Programming\" rmetcalfe15@gmail.com\n$ mailq\n$ mailq\n<\/code>\n<\/li>\n\n\n\n\n<li># Given all this allowed us to send emails via Gmail relay postfix methodologies from a local web server command line, in our <a target=\"_blank\" title=\"Gmail\" href='https:\/\/gmail.com' rel=\"noopener\">Gmail<\/a> account we went to the \"?\" help section and entered \"disallow less secure\" to get to links whereby we went back to \"disallowing less secure\" apps<\/li>\n\n\n<\/ol>\n\n\n\n\n\n<p>Why the \"[]\" bracketing of \"smtp.gmail.com\"?   No <a target=\"_blank\" title='Mail server MX record info from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/MX_record' rel=\"noopener\">MX<\/a> mail server records become involved, that's why.  Take a look at today's <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/postfix_bigsur.gif\" title=\"Tutorial picture\" rel=\"noopener\">animated GIF<\/a> presentation going over these steps above.<\/p>\n\n \n\n<!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-video-share-tutorial\/' rel=\"noopener\">Animated GIF Creator Video Share Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifcvrt'>Previous relevant <a target=\"_blank\" title='Animated GIF Creator Video Revisit Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-video-revisit-tutorial\/' rel=\"noopener\">Animated GIF Creator Video Revisit Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Animated GIF Creator Video Revisit Tutorial\"  src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/webm_ag.gif\" title=\"Animated GIF Creator Video Revisit Tutorial\" \/><\/a><p class=\"wp-caption-text\">Animated GIF Creator Video Revisit Tutorial<\/p><\/div>\n<p>We hope you realize that <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php------------------------------------------GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php------------------------------------------GETME\" rel=\"noopener\">tutorial_to_animated_gif.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator' rel=\"noopener\">Animated GIF Creator<\/a> (helped out by <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/emailhtml.php----------------------GETME\" rel=\"noopener\">a changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/emailhtml.php----------------------GETME\" rel=\"noopener\">emailhtml.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/emailhtml.php' title='Email Creator Helper' rel=\"noopener\">email creator helper<\/a> serverside PHP web application) can be accessed &#8230;<\/p>\n<ol>\n<li>in that public RJM Programming mode of use above &#8230; but even better can be &#8230;<\/li>\n<li>download relevant code to macOS <a target=\"_blank\" title='MAMP' href='https:\/\/mamp.info' rel=\"noopener\">MAMP<\/a> local web server places off \/Applications\/MAMP\/htdocs\/ $_SERVER[&#8216;DOCUMENT_ROOT&#8217;] places &#8230;\n<ul>\n<li><a target=\"_blank\" title='GIFEncoder.class.php' href='https:\/\/gist.github.com\/Xeoncross\/ecccb07454d0b69d9eba' rel=\"noopener\">GIFEncoder.class.php<\/a> &#8230; thanks &#8230; to &#8220;PHP\/animegif\/&#8221;<\/li>\n<li><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php------------------------------------------GETME\" rel=\"noopener\">tutorial_to_animated_gif.php<\/a> to &#8220;PHP\/animegif\/&#8221;<\/li>\n<li><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/animegif.php_GETME\" rel=\"noopener\">animegif.php<\/a> to &#8220;PHP\/animegif\/&#8221;<\/li>\n<li><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/haiku_animated_gif.html--------GETME\" rel=\"noopener\">haiku_animated_gif.html<\/a> to &#8220;PHP\/animegif\/&#8221;<\/li>\n<li><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/macos_ffmpeg_convert.php---------GETME\" rel=\"noopener\">macos_ffmpeg_convert.php<\/a>  to $_SERVER[&#8216;DOCUMENT_ROOT&#8217;]<\/li>\n<li><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/macos_textutil_convert.php------GETME\" rel=\"noopener\">macos_textutil_convert.php<\/a>  to $_SERVER[&#8216;DOCUMENT_ROOT&#8217;]<\/li>\n<li><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/macos_say_record.php-------------------GETME\" rel=\"noopener\">macos_say_record.php<\/a>  to $_SERVER[&#8216;DOCUMENT_ROOT&#8217;]<\/li>\n<li><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/client_browsing.html------------------GETME\" rel=\"noopener\">client_browsing.htm<\/a> to &#8220;HTMLCSS\/&#8221;<\/li>\n<li><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/emailhtml.php-----------------------GETME\" rel=\"noopener\">emailhtml.php<\/a> to &#8220;HTMLCSS\/&#8221;<\/li>\n<li><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/read_exif_off_image_rotate.php------GETME\" rel=\"noopener\">read_exif_off_image_rotate.php<\/a> to &#8220;PHP\/&#8221;<\/li>\n<\/ul>\n<p> &#8230; and check the code for the validity of any <a target=\"_blank\" href='http:\/\/imagemagick.org\/index.php' rel=\"noopener\">ImageMagick<\/a> paths &#8230; and if not all these conditions, simulate the same and cobble it together in the code\n<\/li>\n<\/ol>\n<p> &#8230; one reason being that we do not want to install the wonderful <a target=\"_blank\" title=\"ffmpeg\" href='https:\/\/www.ffmpeg.org\/' rel=\"noopener\">ffmpeg<\/a> (command line video creation tool) on the RJM Programming domain, but, in macOS, here with MAMP, we are quite happy to live with the <a target=\"_blank\" title=\"Homebrew\" href='https:\/\/brew.sh\/' rel=\"noopener\">Homebrew<\/a> (Terminal application&#8217;s) install &#8230;<\/p>\n<p><code><br \/>\nbrew install ffmpeg<br \/>\n<\/code><\/p>\n<p> &#8230; to open a whole new woooooorrrrlllllddd of video creation opportunities using this MAMP local web URL &#8230;<\/p>\n<p><code><br \/>\nHTTP:\/\/localhost:8888\/PHP\/animegif\/tutorial_to_animated_gif.php# Animated GIF Creator on MAMP local web server<br \/>\n<\/code><\/p>\n<p>And so, onto yesterday&#8217;s <a title='Animated GIF Creator PDF Last Reveal Tutorial' href='#agifcpdflrt'>Animated GIF Creator PDF Last Reveal Tutorial<\/a> we decided to revisit video creation parts of our inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator' rel=\"noopener\">Animated GIF Creator<\/a> on this MacBook Air.  We needed to reinstall ffmpeg, and we show that in today&#8217;s <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/webm_ag.gif\" rel=\"noopener\">animated GIF tutorial picture<\/a> and also created the &#8220;video.mov&#8221; video below, in the process &#8230; <\/p>\n<p><video controls style=\"width:100%;\"><source type=\"video\/mp4\" src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/webm_ag.mov\"><\/source><\/video><\/p>\n<p> &#8230; we tweaked out of &#8220;video\/mp4&#8221; ffmpeg created videos thinking towards &#8220;video\/webm&#8221; or &#8220;video.mov&#8221; ffmpeg created videos that suit the &#8220;few frames but spaced out video&#8221; we wanted to achieve for all practical purposes, that &#8220;video\/mp4&#8221; playing too fast for us to see anything much but the first and last slide &#8230;<\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\n$videofr=\" -r \" . (1000 \/ $delay) . \" \";<br \/>\n$videofr=\" -r \" . (1000 \/ $delay) . \" -filter:v setpts=\" . ($delay \/ 1000) . \"*PTS \";<br \/>\n$videomime=\"video\/mp4\";<br \/>\n$videoext=\".mp4\";<br \/>\n<br \/>\n$videofr=\" -framerate 0.1 \";<br \/>\n$videoext=\".webm\";<br \/>\n$videomime=\"video\/webm\";<br \/>\n$videomidbit=\"-c:v libvpx-vp9 -pix_fmt yuva420p -lossless 1 -c:a copy\";<br \/>\n\/\/$videocmd=$videopath . \"ffmpeg  -r \" . (1000 \/ $delay) . \" -filter:v setpts=\" . ($delay \/ 1000) . \"*PTS \" . \" -i \" . dirname(__FILE__) . DIRECTORY_SEPARATOR . \"%03d.jpg \" . dirname(__FILE__) . DIRECTORY_SEPARATOR . \"video.mp4 2&gt; \" . dirname(__FILE__) . DIRECTORY_SEPARATOR . \"video.bad\";<br \/>\n\/\/$svideocmd=\"ffmpeg  -r \" . (1000 \/ $delay) . \" -filter:v setpts=\" . ($delay \/ 1000) . \"*PTS \" . \" -i \" . \"%03d.jpg \" . \"video.mp4\";<br \/>\n  $videocmd=$videopath . \"ffmpeg \" . $videofr . \" -i \" . dirname(__FILE__) . DIRECTORY_SEPARATOR . \"%03d.jpg \" . $videomidbit . \" \" . dirname(__FILE__) . DIRECTORY_SEPARATOR . \"video\" . $videoext . \" 2&gt; \" . dirname(__FILE__) . DIRECTORY_SEPARATOR . \"video.bad\";<br \/>\n  $svideocmd=\"ffmpeg \" . $videofr . \" -i \" . \"%03d.jpg \" . $videomidbit . \" \" . \"video\" . $videoext;<br \/>\n  $videocmd.=\"; \" . $videopath . \"ffmpeg -i \" . \" \" . dirname(__FILE__) . DIRECTORY_SEPARATOR . \"video\" . $videoext . \" \" . dirname(__FILE__) . DIRECTORY_SEPARATOR . \"video.mov 2&gt;&gt; \" . dirname(__FILE__) . DIRECTORY_SEPARATOR . \"video.bad\";<br \/>\n  $svideocmd.=\"; \" . \"ffmpeg -i \" . \" \" . dirname(__FILE__) . DIRECTORY_SEPARATOR . \"video\" . $videoext . \" \" . dirname(__FILE__) . DIRECTORY_SEPARATOR . \"video.mov 2&gt;&gt; \" . dirname(__FILE__) . DIRECTORY_SEPARATOR . \"video.bad\";<br \/>\n$videohtml=\"&lt;video title='\" . $svideocmd . \"' controls id=ivideo type='\" . $videomime . \"'&gt;&lt;source src='video.mov'&gt;&lt;\/source&gt;&lt;source src='video\" . $videoext . \"'&gt;&lt;\/source&gt;&lt;\/video&gt;\";<br \/>\n$videosuffix=\"\";<br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-video-revisit-tutorial\/' rel=\"noopener\">Animated GIF Creator Video Revisit Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifcpdflrt'>Previous relevant <a target=\"_blank\" title='Animated GIF Creator PDF Last Reveal Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-pdf-last-reveal-tutorial\/' rel=\"noopener\">Animated GIF Creator PDF Last Reveal Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Animated GIF Creator PDF Last Reveal Tutorial\"  src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/ttag_your_last.jpg\" title=\"Animated GIF Creator PDF Last Reveal Tutorial\" \/><\/a><p class=\"wp-caption-text\">Animated GIF Creator PDF Last Reveal Tutorial<\/p><\/div>\n<p>As a web application programmer we like buttons.  There are &#8220;buttons&#8221; and there are buttons.   Yes, there is an HTML button element, and it and the input type=button element render as that part of a webpage most recognizable to users the world over.  You click or tap this button and something usually happens.<\/p>\n<p>But we also enjoy &#8220;Emoji Buttons&#8221; for we graphically challenged programmers.  Using an emoji text and graphic can make span elements or p elements or lots of other HTML elements that have an innerHTML property, be like a very succinct button like entity, also appreciated around here because it takes up so little webpage &#8220;real estate&#8221;.<\/p>\n<p>And so onto yesterday&#8217;s <a title='Animated GIF Creator PDF Order Tutorial' href='#agifcpdfot'>Animated GIF Creator PDF Order Tutorial<\/a> we set about, today, &#8220;revealing&#8221; any enduring animated GIF and\/or PDF created during a previous session, using Emoji Buttons as the email\/SMS sharing action buttons.<\/p>\n<p>We say &#8220;revealing&#8221; because, like the way &#8220;Emoji Buttons&#8221; save webpage &#8220;real estate&#8221;, so can the use of the HTML5 <a target=\"_blank\" title='HTML details tag information from w3schools' href='https:\/\/www.w3schools.com\/tags\/tag_details.asp' rel=\"noopener\">details<\/a>\/summary element combination.  It is in that summary &#8220;enduring&#8221; header part of that combination we can place some &#8220;Emoji Buttons&#8221;.  You will <font size=1>(once you start creating and sharing animated GIFs and\/or PDFs)<\/font> see from <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-----------------------------------------GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-----------------------------------------GETME\" rel=\"noopener\">tutorial_to_animated_gif.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator' rel=\"noopener\">Animated GIF Creator<\/a> (helped out by <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/emailhtml.php----------------------GETME\" rel=\"noopener\">a changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/emailhtml.php----------------------GETME\" rel=\"noopener\">emailhtml.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/emailhtml.php' title='Email Creator Helper' rel=\"noopener\">email creator helper<\/a> serverside PHP web application) that we place three Emoji Buttons &#8230;<\/p>\n<ol>\n<li><span onclick=\"alert('Button alert!');\" style=font-size:10px;>&#128223;<\/span> SMS (Animated GIF or PDF) Limited relevance period (ie. no data URIs involved, so rely on an absolute URL whose content might change or start not to exist down the track) &#8230; via &#8220;a&#8221; &#8220;sms:&#8221; link click\/tap<\/li>\n<li><span onclick=\"alert('Button alert!');\" style=font-size:10px;>&#128231;<\/span> Email (Animated GIF or PDF) Limited relevance period (ie. no data URIs involved, so rely on an absolute URL whose content might change or start not to exist down the track) &#8230; via &#8220;a&#8221; &#8220;mailto:&#8221; link click\/tap<\/li>\n<li><span onclick=\"alert('Button alert!');\" style=font-size:20px;>&#128231;<\/span> Email (Animated GIF or PDF) Enduring relevance (ie. data URIs involved, so do not rely on any absolute URL whose content might change or start not to exist down the track) &#8230; via PHP <a target=\"_blank\" title='PHP mail function' href='https:\/\/www.php.net\/manual\/en\/function.mail.php' rel=\"noopener\">mail<\/a> function means of sending email with HTML attachment containing the relevant Animated GIF or PDF<\/li>\n<\/ol>\n<p>Yes, &#8220;Emoji Buttons&#8221; can have their size controlled but not by the usual CSS width and height properties, but by the CSS font-size property.  Here is the new Javascript function that those Emoji Button &#8220;onclick&#8221; logic points to &#8230;<\/p>\n<p>&lt;?php eho &#8221;<br \/>\n<code><br \/>\nfunction askes(isemail, isoab) {<br \/>\n  var esask='', izhr=null, izform=null;<br \/>\n  var isoa=document.getElementById(isoab.id.replace('b',''));<br \/>\n  if (isemail) {<br \/>\n    esask=prompt('Please enter email address to send this to', '');<br \/>\n    if (esask != null) {<br \/>\n      if (esask.indexOf('@') != -1) {<br \/>\n        if (isoa.outerHTML.indexOf('&lt;img') == 0) {<br \/>\n        \/\/alert('More Animated GIF to come');<br \/>\n  izhr = new XMLHttpRequest();<br \/>\n  izform=new FormData();<br \/>\n  izform.append('to', esask.trim());<br \/>\n  izform.append('inline', '\" . dirname(__FILE__) . DIRECTORY_SEPARATOR . server_remote_addr() . \".gif\" . \"');<br \/>\n  izform.append('subj', 'My Latest Animated GIF via RJM Programming ... ');<br \/>\n  izform.append('tdhuhta', ('&lt;body&gt;&lt;div title=\\\"\" . explode('\/animegif',$durlis)[0] . '\/animegif\/' . server_remote_addr() . \"\\\" style=\\\"overflow:auto;-webkit-overflow-scrolling:touch;height:100%;\\\"&gt;&lt;img style=\\\"width:100%;height:900px;\\\" src=\\\"\" . dirname(__FILE__) . DIRECTORY_SEPARATOR . server_remote_addr() . \".gif\" . \"\\\"&gt;&lt;\/img&gt;&lt;\/div&gt;&lt;\/body&gt;'));<br \/>\n  izhr.open('post', '\/\/www.rjmprogramming.com.au\/HTMLCSS\/emailhtml.php', true);<br \/>\n  izhr.send(izform);<br \/>\n        } else if (isoa.outerHTML.indexOf('&lt;a') != 0) {<br \/>\n        \/\/alert('More PDF to come');<br \/>\n  izhr = new XMLHttpRequest();<br \/>\n  izform=new FormData();<br \/>\n  izform.append('to', esask.trim());<br \/>\n  izform.append('inline', '\" . dirname(__FILE__) . DIRECTORY_SEPARATOR . server_remote_addr() . \"_animegif.pdf\" . \"');<br \/>\n  izform.append('subj', 'My Latest PDF via Animated GIF via RJM Programming ... ');<br \/>\n  izform.append('tdhuhta', ('&lt;body&gt;&lt;div title=\\\"\" . explode('\/animegif',$durlis)[0] . '\/animegif\/' . server_remote_addr() . \"_\\\" style=\\\"overflow:auto;-webkit-overflow-scrolling:touch;height:100%;\\\"&gt;&lt;object style=\\\"width:100%;height:900px;\\\" type=\\\"application\/pdf\\\" data=\\\"\" . dirname(__FILE__) . DIRECTORY_SEPARATOR . server_remote_addr() . \"_animegif.pdf\" . \"\\\"&gt;&lt;\/object&gt;&lt;\/div&gt;&lt;\/body&gt;'));<br \/>\n  izhr.open('post', '\/\/www.rjmprogramming.com.au\/HTMLCSS\/emailhtml.php', true);<br \/>\n  izhr.send(izform);<br \/>\n        } else {<br \/>\n        isoa.href='mailto:' + esask.trim() + '?' + isoa.href.split('?')[1];<br \/>\n        isoa.click();<br \/>\n        }<br \/>\n      }<br \/>\n    }<br \/>\n  } else {<br \/>\n    esask=prompt('Please enter SMS number to send this to', '');<br \/>\n    if (esask != null) {<br \/>\n      if ((esask.trim() != '' && esask.trim().replace(\/0\/g,'').replace(\/1\/g,'').replace(\/2\/g,'').replace(\/3\/g,'').replace(\/4\/g,'').replace(\/5\/g,'').replace(\/6\/g,'').replace(\/7\/g,'').replace(\/8\/g,'').replace(\/9\/g,'') == '')) {<br \/>\n         isoa.href='sms:' + esask.trim() + '&' + isoa.href.split('&')[1];<br \/>\n         isoa.click();<br \/>\n      }<br \/>\n    }<br \/>\n  }<br \/>\n}<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;<\/p>\n<p>Cute, huh?!<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-pdf-last-reveal-tutorial\/' rel=\"noopener\">Animated GIF Creator PDF Last Reveal Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifcpdfot'>Previous relevant <a target=\"_blank\" title='Animated GIF Creator PDF Order Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-pdf-order-tutorial\/' rel=\"noopener\">Animated GIF Creator PDF Order Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Animated GIF Creator PDF Order Tutorial\"  src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/ttag_pdf_order.gif\" title=\"Animated GIF Creator PDF Order Tutorial\" \/><\/a><p class=\"wp-caption-text\">Animated GIF Creator PDF Order Tutorial<\/p><\/div>\n<p>Order becomes an interesting subject to us today regarding the PDF conversions possible in amongst the Animated GIF creating of yesterday&#8217;s <a title='Animated GIF Creator PDF Share Tutorial' href='#agifcpdfst'>Animated GIF Creator PDF Share Tutorial<\/a>.<\/p>\n<p>That is because we may have some advanced users out there that want that possibility of differentiating the data of &#8230;<\/p>\n<ul>\n<li>animated GIF &#8230; containing all features asked for, in totality &#8230; from the chance for the user to have any of the PDF conversion option sets below &#8230;<\/li>\n<li>PDF &#8230; one of &#8230;\n<ol>\n<li>no PDF conversion<\/li>\n<li>full PDF conversion &#8230; with the user choices regarding raw image content and title and watermarking and <a target=\"_blank\" href='http:\/\/imagemagick.org\/index.php' rel=\"noopener\">ImageMagick<\/a> and <a target=\"_blank\" title='PHP GD' href='https:\/\/www.php.net\/manual\/en\/function.gd-info.php' rel=\"noopener\">GD<\/a> modifiers<\/li>\n<li>light PDF conversion &#8230; with the user choices regarding just raw image content (the only option out of these last three available before today&#8217;s work)<\/li>\n<li>medium PDF conversion &#8230; with the user choices regarding just <a target=\"_blank\" href='http:\/\/imagemagick.org\/index.php' rel=\"noopener\">ImageMagick<\/a> and <a target=\"_blank\" title='PHP GD' href='https:\/\/www.php.net\/manual\/en\/function.gd-info.php' rel=\"noopener\">GD<\/a> modifiers<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<p> &#8230; perhaps as a &#8220;before and after&#8221; tool regarding presentations, maybe?<\/p>\n<p>No dropdowns used here (enforcing an order), just the user&#8217;s order in which they choose to select the &#8220;PDF conversion&#8221; option from the ImageMagick dropdown (in relation to other selections) determining how and when this PDF conversion occurs in the workflow through to creating the animated GIF with <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php----------------------------------------GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php----------------------------------------GETME\" rel=\"noopener\">tutorial_to_animated_gif.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator' rel=\"noopener\">Animated GIF Creator<\/a> serverside PHP web application.  Just remember to select PDF Conversion as early as possible to do that &#8220;light PDF conversion&#8221; option above and last thing if you are interested in &#8220;full PDF conversion&#8221; (where you can create PDF documents with the bells and whistles <a target=\"_blank\" href='http:\/\/imagemagick.org\/index.php' rel=\"noopener\">ImageMagick<\/a> and <a target=\"_blank\" title='PHP GD' href='https:\/\/www.php.net\/manual\/en\/function.gd-info.php' rel=\"noopener\">GD<\/a> modifiers can offer) and today&#8217;s <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/ttag_pdf_order.gif\" title=\"Tutorial picture\" rel=\"noopener\">tutorial picture<\/a> is an example of &#8220;medium PDF conversion&#8221; (when we ordered our settings by first Grayscale, second PDF conversion and last title and watermarking options).  Clicking or tapping the ImageMagick link can get the user to the Javascript popup window where they might define the email or SMS recipient for that PDF conversion data file download.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-pdf-order-tutorial\/' rel=\"noopener\">Animated GIF Creator PDF Order Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifcpdfst'>Previous relevant <a target=\"_blank\" title='Animated GIF Creator PDF Share Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-pdf-share-tutorial\/' rel=\"noopener\">Animated GIF Creator PDF Share Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Animated GIF Creator PDF Share Tutorial\"  src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/ttag_pdf_email.jpg\" title=\"Animated GIF Creator PDF Share Tutorial\" \/><\/a><p class=\"wp-caption-text\">Animated GIF Creator PDF Share Tutorial<\/p><\/div>\n<p>To share yesterday&#8217;s <a title='Animated GIF Creator PDF Conversion Tutorial' href='#agifcpdfct'>Animated GIF Creator PDF Conversion Tutorial<\/a> PDF data formatted image slides (and then onto an animated GIF) would be a step forward, wouldn&#8217;t you say?<\/p>\n<p>What sharing conduits do we code for?  We always intended &#8230;<\/p>\n<ul>\n<li>email &#8230; but as the day wore on trying to get the usage to work on mobile and non-mobile we decided to relinquish our wish to not have to create a user specific enduring (until that same browser type and user combination share) PDF document for the user request &#8230; mainly to get mobile email downloads to be friendly &#8230; and so this opened the door for &#8230;<\/li>\n<li>SMS &#8230; to access that enduring PDF as a URL in the SMS message (that becomes a link for the recipient)<\/li>\n<\/ul>\n<p> &#8230; the email methodology used being that &#8220;midair feeling&#8221; <a target=\"_blank\" title='Ajax information from Wikipedia ... thanks' href='http:\/\/en.wikipedia.org\/wiki\/Ajax_%28programming%29' rel=\"noopener\">Ajax<\/a>\/<a target=\"_blank\" title='FormData object information' href='https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/FormData' rel=\"noopener\">FormData<\/a> approach in <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php---------------------------------------GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php---------------------------------------GETME\" rel=\"noopener\">tutorial_to_animated_gif.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator' rel=\"noopener\">Animated GIF Creator<\/a> serverside PHP web application &#8230;<\/p>\n<p>&lt;?php echo &#8221;<br \/>\n<code><br \/>\nfunction emailhtmlit() {<br \/>\n var induri=ginduri;<br \/>\n var pemail='\" . urldecode($_GET['outpdf']) . urldecode($_POST['outpdf']) . \"';<br \/>\n if (pemail != null) {<br \/>\n   if (pemail.indexOf('@') != -1 || (pemail.trim() != '' && pemail.trim().replace(\/0\/g,'').replace(\/1\/g,'').replace(\/2\/g,'').replace(\/3\/g,'').replace(\/4\/g,'').replace(\/5\/g,'').replace(\/6\/g,'').replace(\/7\/g,'').replace(\/8\/g,'').replace(\/9\/g,'') == '')) {<br \/>\n   if (induri.trim() == '') {<br \/>\n   if (induri == '') {<br \/>\n   document.getElementById('pdfproposed').src='.\/animegif.pdf?rand=' + Math.floor(Math.random() * 19854654);<br \/>\n   } else {<br \/>\n   ginduri='found';<br \/>\n   }<br \/>\n   setTimeout(emailhtmlit, 15000);<br \/>\n   } else {<br \/>\n   ginduri='';<br \/>\n  var zhr = new XMLHttpRequest();<br \/>\n  var zform=new FormData();<br \/>\n  if (pemail.indexOf('@') != -1) { zform.append('to', pemail); }<br \/>\n  zform.append('inline', '\" . dirname(__FILE__) . DIRECTORY_SEPARATOR . \"animegif.pdf\" . \"');<br \/>\n  zform.append('subj', 'My PDF version of Animated GIF via RJM Programming ... ');<br \/>\n  zform.append('tdhuhta', ('&lt;body&gt;&lt;div title=\\\"\" . explode('\/animegif',$durlis)[0] . '\/animegif\/' . server_remote_addr() . \"_\\\" style=\\\"overflow:auto;-webkit-overflow-scrolling:touch;height:100%;\\\"&gt;&lt;object style=\\\"width:100%;height:900px;\\\" type=\\\"application\/pdf\\\" data=\\\"\" . dirname(__FILE__) . DIRECTORY_SEPARATOR . 'animegif.pdf' . \"\\\"&gt;&lt;embed style=\\\"width:100%;height:900px;\\\" type=\\\"application\/pdf\\\" src=\\\"\" . dirname(__FILE__) . DIRECTORY_SEPARATOR . 'animegif.pdf' . \"\\\"&gt;&lt;\/embed&gt;&lt;\/object&gt;&lt;\/div&gt;&lt;\/body&gt;'));<br \/>\n  \/\/zform.append('tdhuhta', ('&lt;body&gt;&lt;iframe srcdoc=\\\"\" . dirname(__FILE__) . DIRECTORY_SEPARATOR . 'animegif.pdf' . \"\\\"&gt;&lt;\/iframe&gt;&lt;\/body&gt;'));<br \/>\n  zhr.open('post', '\/\/www.rjmprogramming.com.au\/HTMLCSS\/emailhtml.php', true);<br \/>\n  zhr.send(zform);<br \/>\n  if (pemail.indexOf('@') == -1) {<br \/>\n    var hrefp=document.getElementById('pdfsms').href.split('&body=')[0];<br \/>\n    hrefp+=pemail.trim() + '&body=' + document.getElementById('pdfsms').href.split('&body=')[1];<br \/>\n    document.getElementById('pdfsms').href=hrefp;<br \/>\n    document.getElementById('pdfsms').click();<br \/>\n  }<br \/>\n  }<br \/>\n   }<br \/>\n }<br \/>\n}<br \/>\n<\/code><br \/>\n&#8220;;   ?&gt;<\/p>\n<p> &#8230; and this called on our PHP email creator helper to better interface in its $_POST arguments reading section in <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/emailhtml.php---------------------GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/emailhtml.php---------------------GETME\" rel=\"noopener\">emailhtml.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/emailhtml.php' title='Email Creator Helper' rel=\"noopener\">email creator helper<\/a> serverside PHP web application &#8230;<\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\n$psacv=\"\";<br \/>\n$okayin=true;<br \/>\n$subd=\"\";<br \/>\n$subptitle='';<br \/>\n$subdata=\"\";<br \/>\n$subfile=\"\";<br \/>\n$getpostfound=false;<br \/>\n&lt;br&gt;<br \/>\nforeach( $_POST as  $name=&gt;$val ) {<br \/>\n  if ($val != \"\") {<br \/>\n\/\/ blah blah blah    \/\/file_put_contents(\"jnv.\" . $name, \"jnv.inv00 \" . strlen($phpcont));<br \/>\n  if ($name == \"tdhuhta\" && $subfile != \"\" && $subdata != \"\" && strpos(str_replace(\"+\",\" \",urldecode($val)), $subfile) !== false) {<br \/>\n   if (strpos(str_replace(\"+\",\" \",urldecode($val)), ' srcdoc=\"') !== false || strpos(str_replace(\"+\",\" \",urldecode($val)), ' data=\"') !== false) {<br \/>\n      if (strpos(str_replace(\"+\",\" \",urldecode($val)), ' title=\"') !== false) {      \/\/file_put_contents('haaa.aaa',explode('\/animegif\/', explode('\"', explode(' title=\"', str_replace(\"+\",\" \",urldecode($val)))[1])[0])[1]);<br \/>\n        if (!file_exists('..\/PHP\/animegif\/' . explode('\/animegif\/', explode('\"', explode(' title=\"', str_replace(\"+\",\" \",urldecode($val)))[1])[0])[1] . 'animegif.pdf')) {<br \/>\n        if (file_exists('..\/PHP\/animegif\/animegif.pdf')) {<br \/>\n          copy('..\/PHP\/animegif\/animegif.pdf', '..\/PHP\/animegif\/' . explode('\/animegif\/', explode('\"', explode(' title=\"', str_replace(\"+\",\" \",urldecode($val)))[1])[0])[1] . 'animegif.pdf');<br \/>\n        }<br \/>\n        }<br \/>\n        $psacv=explode('\"', explode(' title=\"', str_replace(\"+\",\" \",urldecode($val)))[1])[0] . 'animegif.pdf';<br \/>\n        $subptitle='&lt;a target=_blank href=\"' . explode('\"', explode(' title=\"', str_replace(\"+\",\" \",urldecode($val)))[1])[0] . 'animegif.pdf\"&gt;Mobile whole PDF&lt;\/a&gt;&lt;br&gt;';<br \/>\n      }<br \/>\n     $vrest=explode('\"', explode(' srcdoc=\"',str_replace(\"+\",\" \",urldecode($val)))[1])[0];<br \/>\n     $val=urlencode(\"&lt;body&gt;\" . $subptitle . \"&lt;iframe style='width:100%;height:95vh;overflow:auto;-webkit-overflow-scrolling:touch;' srcdoc='&lt;div style=width:92%;height:95vh;overflow:auto;-webkit-overflow-scrolling:touch;&gt;&lt;object id=myobj style=width:95%;height:95vh; type=application\/pdf data=\\\"\" . $subdata . \"\\\"&gt;&lt;\/object&gt;&lt;\/div&gt;'&gt;&lt;\/iframe&gt;&lt;\/body&gt;\");<br \/>\n   }<br \/>\n\/\/ blah blah blah<br \/>\n   if ($name == \"inline\") {<br \/>\n    if (strpos(str_replace(\"+\",\" \",urldecode($val)), 'animegif.pdf') !== false && isset($_POST['tdhuhta'])) {<br \/>\n     if (file_exists(str_replace(\"+\",\" \",urldecode($val)))) {<br \/>\n      $subfile=str_replace(\"+\",\" \",urldecode($val));<br \/>\n      $subdata='data:application\/pdf;base64,' . base64_encode(file_get_contents(str_replace(\"+\",\" \",urldecode($val))));<br \/>\n      $val=\"\";<br \/>\n      $name=\"x\";<br \/>\n      $okayin=false;<br \/>\n     }<br \/>\n    }<br \/>\n\/\/ blah blah blah<br \/>\n  }<br \/>\n}<br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p>Creating the PDFs got helped out in &#8220;reliability terms&#8221; via the introduced <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/animegif.php_GETME\" rel=\"noopener\">animegif.php<\/a> inhouse <!--a target=_blank href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/animegif.php' title='Wait Around Longer'-->Wait Around Longer<!--\/a--> serverside PHP web application.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-pdf-share-tutorial\/' rel=\"noopener\">Animated GIF Creator PDF Share Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifcpdfct'>Previous relevant <a target=\"_blank\" title='Animated GIF Creator PDF Conversion Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-pdf-conversion-tutorial\/' rel=\"noopener\">Animated GIF Creator PDF Conversion Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Animated GIF Creator PDF Conversion Tutorial\"  src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/ttag_pdf.jpg\" title=\"Animated GIF Creator PDF Conversion Tutorial\" \/><\/a><p class=\"wp-caption-text\">Animated GIF Creator PDF Conversion Tutorial<\/p><\/div>\n<p>Up to yesterday&#8217;s <a title='Animated GIF Creator Slide Specific Application Tutorial' href='#agifcssat'>Animated GIF Creator Slide Specific Application Tutorial<\/a> the recent progress had us &#8230;<\/p>\n<ul>\n<li>knowing the good places to intervene between the original slide image data being read in and the animated GIF slide output &#8230; and &#8230;<\/li>\n<li>involvement of <a target=\"_blank\" href='http:\/\/imagemagick.org\/index.php' rel=\"noopener\">ImageMagick<\/a> &#8230; so, today, these two help us down the path to &#8230;<\/li>\n<li>adding PDF as an output format possibility, in addition to the animated GIF and other ideas floated as output formats<\/li>\n<\/ul>\n<p> &#8230; with <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php--------------------------------------GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php--------------------------------------GETME\" rel=\"noopener\">tutorial_to_animated_gif.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator' rel=\"noopener\">Animated GIF Creator<\/a> serverside PHP web application.<\/p>\n<p>We have more &#8220;reliability work&#8221; and &#8220;email sharing work&#8221; to go after today&#8217;s start, but it primarily called on <a target=\"_blank\" href='http:\/\/imagemagick.org\/index.php' rel=\"noopener\">ImageMagick<\/a> command line&#8217;s talent for a command like &#8230;<\/p>\n<p><code><br \/>\nconvert \/tmp\/imtmp0*.*[gGmMiI]* \/tmp\/imtmp000.pdf<br \/>\n<\/code><\/p>\n<p> &#8230; to &#8220;concatenate&#8221; into the one output PDF file (called &#8220;\/tmp\/imtmp000.pdf&#8221;) the slides, arranged by our code into that &#8220;\/tmp\/imtmp0*.*[gGmMiI]*&#8221; (file specification) arrangement above.  Yes, we meant &#8220;convert&#8221; above, as &#8220;mogrify&#8221; (batch work) appears not to be able to perform this task.<\/p>\n<p>We hope you stay the course!<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-pdf-conversion-tutorial\/' rel=\"noopener\">Animated GIF Creator PDF Conversion Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifcssat'>Previous relevant <a target=\"_blank\" title='Animated GIF Creator Slide Specific Application Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-slide-specific-application-tutorial\/' rel=\"noopener\">Animated GIF Creator Slide Specific Application Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Animated GIF Creator Slide Specific Application Tutorial\"  src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/making_of_slide_number_nuance.gif\" title=\"Animated GIF Creator Slide Specific Application Tutorial\" \/><\/a><p class=\"wp-caption-text\">Animated GIF Creator Slide Specific Application Tutorial<\/p><\/div>\n<p>It&#8217;s all fine and good improving on the <a target=\"_blank\" href='http:\/\/imagemagick.org\/index.php' rel=\"noopener\">ImageMagick<\/a> and <a target=\"_blank\" title='PHP GD' href='https:\/\/www.php.net\/manual\/en\/function.gd-info.php' rel=\"noopener\">GD<\/a> and <a target=\"_blank\" title='Exif information from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Exif' rel=\"noopener\">Exif<\/a> functionality modifications like with yesterday&#8217;s <a title='Animated GIF Creator Exif Rotation Compensation Tutorial' href='#agifcerct'>Animated GIF Creator Exif Rotation Compensation Tutorial<\/a>, but in reality, if you are going to start creating animated GIFs to explain a process, you are going to want to apply these &#8220;slide modifiers&#8221; on a slide by slide basis, rather than enforcing a &#8220;whole of animated GIF slide set&#8221; paradigm, as for the last few days worth of work.<\/p>\n<p>And so, we decided to do what we often do, &#8220;sliding in&#8221; more functionality <font size=1>(chortle, chortle)<\/font>.  We tend to want to &#8230;<\/p>\n<ul>\n<li>start with hardcoded text (or element) &#8230; somewhere &#8230; today it happens to be in an HTML span element that once involved just &#8230;<br \/>\n<code><br \/>\n&lt;span id=\"smyim\"&gt;&lt;\/span&gt;<br \/>\n<\/code><br \/>\n &#8230; and used to get filled, Javascript DOM wise, when needed via &#8230;<br \/>\n<code><br \/>\ndocument.getElementById('smyim').innerHTML='ImageMagick switches: ';   \/\/ and yes, it remains that way even now, but read on ...<br \/>\n<\/code>\n<\/li>\n<li>add <font color=blue>intelligence<\/font> (quite often that being <i>onclick<\/i> logic(s)) to that hardcoded element via &#8230;<br \/>\n<code><br \/>\n&lt;span id=smyim<font color=blue> title=Application onclick=applyto(); style=cursor:pointer;text-decoration:underline;<\/font>&gt;&lt;\/span&gt;<br \/>\n<\/code>\n<\/li>\n<li>that serves the purpose, as the user clicks\/taps it (alerted to that fact, perhaps, because we underline the element and add an appropriate cursor when hovering over it (plus a title)), of calling Javascript &#8230;<br \/>\n<code><br \/>\nfunction applyto() {<br \/>\n  var huhto=prompt('Apply ImageMagick and\/or GD to which slides, in comma separated list, counting starting with 1?  Defaults to applying to all slides.  Comma delimit.  Negatives mean all but.  Ranges can be specified.  For example ... 2,4-7,9', document.getElementById('appliedto').value);<br \/>\n  if (huhto == null) { huhto=''; }<br \/>\n  if (huhto.trim() == '') {<br \/>\n    document.getElementById('appliedto').value='';<br \/>\n    document.getElementById('smyim').title='Application';<br \/>\n  } else {<br \/>\n    document.getElementById('appliedto').value=huhto.trim();<br \/>\n    document.getElementById('smyim').title=huhto.trim();<br \/>\n  }<br \/>\n}<br \/>\n<\/code>\n<\/li>\n<li>to glean an (often times out of the normal workflow of the web application) informational piece of data, interactively, from the user, via a Javascript prompt popup<\/li>\n<\/ul>\n<p>So that&#8217;s the clientside of this work &#8230; &#8220;alerting the user to the existance of the functionality&#8221; you might say.<\/p>\n<p>And then there&#8217;s &#8220;the application&#8221; of that nuanced user requirement.  And that&#8217;s where the &#8220;inhouse &#8216;our&#8217; prefix to <i>wrapper<\/i> function name paradigms&#8221; come in handy.  We introduced &#8220;blanket&#8221; functionality thoughts via this approach, and so to &#8220;partially undo&#8221; that thinking, we make the &#8220;our&#8221; prefix conditional, as is available to us with <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-------------------------------------GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-------------------------------------GETME\" rel=\"noopener\">tutorial_to_animated_gif.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator' rel=\"noopener\">Animated GIF Creator<\/a> serverside PHP web application (helped out by <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/exif_rotation_check.php-GETME\" rel=\"noopener\">a changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/exif_rotation_check.php-GETME\" rel=\"noopener\">exif_rotation_check.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/exif_rotation_check.php' title='Animated GIF Creator helper' rel=\"noopener\">Exif detector<\/a> PHP helper), <font color=blue>as per<\/font> &#8230;<\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\n<font color=blue>function ourcomplicated($inio, $iappl) {<br \/>\n  $ideasl=explode(\",\", str_replace(' ','',$iappl));<br \/>\n  $xour=\"our\";<br \/>\n  for ($iqa=0; $iqa&lt;sizeof($ideasl); $iqa++) {<br \/>\n    if (trim($ideasl[$iqa]) != '') {<br \/>\n      $xour=\"\";<br \/>\n      if (('-' . $inio) == trim($ideasl[$iqa])) { return \"\";  }<br \/>\n      $ideasr=explode(\"-\", str_replace(' ','',trim($ideasl[$iqa])));<br \/>\n      for ($iqb=0; $iqb&lt;sizeof($ideasr); $iqb++) {<br \/>\n        if (('' . $inio) == trim($ideasr[$iqb])) {<br \/>\n          return \"our\";<br \/>\n        }<br \/>\n        if ($iqb == 1) {<br \/>\n          if (trim($ideasr[1]) == \"\") { $ideasr[1]=\"99999999\"; }<br \/>\n          if ($inio &gt;= $ideasr[0] && $inio &lt;= $ideasr[1]) { return \"our\";  }<br \/>\n        }<br \/>\n      }<br \/>\n    }<br \/>\n  }<br \/>\n  return $xour;<br \/>\n}<\/font><br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p> &#8230; <font color=blue>teamed with<\/font> &#8230;<\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\n  <font color=blue>$ours=\"our\";<\/font><br \/>\n  for ($io=1; $io<sizeof($photos); $io++) {\n    <font color=blue>$ours=ourcomplicated($io, $iappliedto);<\/font><br \/>\n    \/\/ blah blah blah<br \/>\n    if (strpos($aphoto[0], \";base64,\") !== false) {<br \/>\n      $gifphp.=str_replace(\"imagecreatefromjpeg('source01.jpg');\", \"<font color=blue>\" . $<\/font>our<font color=blue>s . \"<\/font>imagecreatefromstring(base64_decode('\" . explode(\";base64,\",$aphoto[0])[1] . \"'));\", str_replace(\"\\$text='';\", \"\\$text=\\\"\" . str_replace(\"+\",\" \",urldecode($atext)) . \"\\\";\", $eachonestring));<br \/>\n    } else if (strpos(strtolower($aphoto[0]), \"\/\/\") !== false) {<br \/>\n      $gifphp.=str_replace(\"imagecreatefromjpeg('source01.jpg');\", \"<font color=blue>\" . $<\/font>our<font color=blue>s . \"<\/font>imagecreatefromstring(@file_get_contents('\" . $prefix . $aphoto[0] . \"'));\", str_replace(\"\\$text='';\", \"\\$text=\\\"\" . str_replace(\"+\",\" \",urldecode($atext)) . \"\\\";\", $eachone));<br \/>\n    } else if (strpos(strtolower($aphoto[0]), \".jp\") !== false) {<br \/>\n      if (strpos($prefix, \"..\/..\/\") !== false && !file_exists($prefix . $aphoto[0]) && file_exists(str_replace(\"..\/..\/\",\"..\/\",$prefix) . $aphoto[0])) {<br \/>\n        $prefix=str_replace(\"..\/..\/\",\"..\/\",$prefix);<br \/>\n      }<br \/>\n      \/\/file_put_contents('qpqp.qpqp', $eachone . \"\\n\\n\" . $atext . \"\\n\\n\" . str_replace(\"\\$text='';\", \"\\$text=\\\"\" . str_replace(\"+\",\" \",urldecode($atext)) . \"\\\";\", $eachone));<br \/>\n      $gifphp.=str_replace(\"imagecreatefromjpeg('source01.jpg');\", \"<font color=blue>\" . $<\/font>our<font color=blue>s . \"<\/font>imagecreatefromjpeg('\" . $prefix . $aphoto[0] . \"');\", str_replace(\"\\$text='';\", \"\\$text=\\\"\" . str_replace(\"+\",\" \",urldecode($atext)) . \"\\\";\", $eachone));<br \/>\n      \/\/file_put_contents('qpqpqp.qpqpqp', $gifphp);<br \/>\n    } else if (strpos(strtolower($aphoto[0]), \".png\") !== false) {<br \/>\n      if (strpos($prefix, \"..\/..\/\") !== false && !file_exists($prefix . $aphoto[0]) && file_exists(str_replace(\"..\/..\/\",\"..\/\",$prefix) . $aphoto[0])) {<br \/>\n        $prefix=str_replace(\"..\/..\/\",\"..\/\",$prefix);<br \/>\n      }<br \/>\n      $gifphp.=str_replace(\"imagecreatefromjpeg('source01.jpg');\", \"<font color=blue>\" . $<\/font>our<font color=blue>s . \"<\/font>imagecreatefrompng('\" . $prefix . $aphoto[0] . \"');\", str_replace(\"\\$text='';\", \"\\$text=\\\"\" . str_replace(\"+\",\" \",urldecode($atext)) . \"\\\";\", $eachone));<br \/>\n    } else if (strpos(strtolower($aphoto[0]), \".gif\") !== false) {<br \/>\n      if (strpos($prefix, \"..\/..\/\") !== false && !file_exists($prefix . $aphoto[0]) && file_exists(str_replace(\"..\/..\/\",\"..\/\",$prefix) . $aphoto[0])) {<br \/>\n        $prefix=str_replace(\"..\/..\/\",\"..\/\",$prefix);<br \/>\n      }<br \/>\n      $gifphp.=str_replace(\"imagecreatefromjpeg('source01.jpg');\", \"<font color=blue>\" . $<\/font>our<font color=blue>s . \"<\/font>imagecreatefromgif('\" . $prefix . $aphoto[0] . \"');\", str_replace(\"\\$text='';\", \"\\$text=\\\"\" . str_replace(\"+\",\" \",urldecode($atext)) . \"\\\";\", $eachone));<br \/>\n    } else if (strpos(strtolower($aphoto[0]), \".bmp\") !== false) {<br \/>\n      if (strpos($prefix, \"..\/..\/\") !== false && !file_exists($prefix . $aphoto[0]) && file_exists(str_replace(\"..\/..\/\",\"..\/\",$prefix) . $aphoto[0])) {<br \/>\n        $prefix=str_replace(\"..\/..\/\",\"..\/\",$prefix);<br \/>\n      }<br \/>\n      $gifphp.=str_replace(\"imagecreatefromjpeg('source01.jpg');\", \"<font color=blue>\" . $<\/font>our<font color=blue>s . \"<\/font>imagecreatefrombmp('\" . $prefix . $aphoto[0] . \"');\", str_replace(\"\\$text='';\", \"\\$text=\\\"\" . str_replace(\"+\",\" \",urldecode($atext)) . \"\\\";\", $eachone));<br \/>\n    }<br \/>\n    \/\/ blah blah blah<br \/>\n  }<br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p>We use these &#8220;new abilities&#8221; better explaining &#8220;the abscence or otherwise of Exif checking&#8221;, and the implications of that in the animated GIF creator woooooorrrrrrlllllddd, contrasting the first two slides, showing one with &#8220;No Exif checking&#8221; <font size=1>(the bad old days)<\/font> versus &#8220;With Exif checking&#8221; <font size=1>(the renaissance of liberated thinking in the South South East woooorrrrrlllldddd)<\/font> in today&#8217;s <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/making_of_slide_number_nuance.gif\" title=\"Tutorial picture\" rel=\"noopener\">animated GIF<\/a> presentation.<\/p>\n<p>Get the picture?!<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-slide-specific-application-tutorial\/' rel=\"noopener\">Animated GIF Creator Slide Specific Application Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifcerct'>Previous relevant <a target=\"_blank\" title='Animated GIF Creator Exif Rotation Compensation Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-exif-rotation-compensation-tutorial\/' rel=\"noopener\">Animated GIF Creator Exif Rotation Compensation Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" id='qmgti' style=\"float:left; border: 15px solid pink;\" alt=\"Animated GIF Creator Exif Rotation Compensation Tutorial\"  src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/exif_one_two.jpg\" title=\"Animated GIF Creator Exif Rotation Compensation Tutorial\" \/><\/a><p class=\"wp-caption-text\">Animated GIF Creator Exif Rotation Compensation Tutorial<\/p><\/div>\n<p>The recent couple of days of work like yesterday&#8217;s <a title='Animated GIF Creator GD Transformations Interfacing Tutorial' href='#agifcgdtit'>Animated GIF Creator GD Transformations Interfacing Tutorial<\/a> have given us &#8220;rotation functionality&#8221; tools to counteract the unusual effects Exif &#8230;<\/p>\n<blockquote cite='https:\/\/en.wikipedia.org\/wiki\/Exif'><p>\nExchangeable image file format (officially Exif, according to JEIDA\/JEITA\/CIPA specifications) is a standard that specifies the formats for images, sound, and ancillary tags used by digital cameras (including smartphones), scanners and other systems handling image and sound files recorded by digital cameras.\n<\/p><\/blockquote>\n<p> &#8230; can have converting mobile device camera created images into animated GIFs via <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php------------------------------------GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php------------------------------------GETME\" rel=\"noopener\">tutorial_to_animated_gif.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator' rel=\"noopener\">Animated GIF Creator<\/a> PHP web application.<\/p>\n<p>But with some photos it&#8217;s there in the photo&#8217;s metadata information letting the future user know what orientation the camera of that mobile device was in as you took the photo.  In order to help our animated GIF creator, the first slide image is scoured for Exif metadata and if found, a suitable rotation correction can be applied to the slides there and then.  In order to scour for Exif metadata we needed to write a <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/exif_rotation_check.php_GETME\" rel=\"noopener\">exif_rotation_check.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/exif_rotation_check.php' title='Animated GIF Creator helper' rel=\"noopener\">Exif detector<\/a> PHP helper.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-exif-rotation-compensation-tutorial\/' rel=\"noopener\">Animated GIF Creator Exif Rotation Compensation Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifcgdtit'>Previous relevant <a target=\"_blank\" title='Animated GIF Creator GD Transformations Interfacing Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-gd-transformations-interfacing-tutorial\/' rel=\"noopener\">Animated GIF Creator GD Transformations Interfacing Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" id='qmgti' style=\"float:left; border: 15px solid pink;\" alt=\"Animated GIF Creator GD Transformations Interfacing Tutorial\"  src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/ttag_gd_rotate.jpg\" title=\"Animated GIF Creator GD Transformations Interfacing Tutorial\" \/><\/a><p class=\"wp-caption-text\">Animated GIF Creator GD Transformations Interfacing Tutorial<\/p><\/div>\n<p>The PHP <a target=\"_blank\" title='PHP GD' href='https:\/\/www.php.net\/manual\/en\/function.gd-info.php' rel=\"noopener\">GD<\/a> image library is so much more useful than for the &#8220;filters&#8221; interfaced to with yesterday&#8217;s <a title='Animated GIF Creator GD Filter Interfacing Tutorial' href='#agifcgdfit'>Animated GIF Creator GD Filter Interfacing Tutorial<\/a>.  Under an &#8220;umbrella term&#8221; transformations, today we add interfacing to <a target=\"_blank\" title='PHP GD' href='https:\/\/www.php.net\/manual\/en\/function.gd-info.php' rel=\"noopener\">GD<\/a> functionality &#8230;<\/p>\n<p><select size=11 data-onchenge=gdadd(this);><option value='CROPAUTO CROP DEFAULT'>Crop Default<\/option><option value='CROPAUTO CROP TRANSPARENT'>Crop Transparent<\/option><option value='CROPAUTO CROP BLACK'>Crop Black<\/option><option value='CROPAUTO CROP WHITE'>Crop White<\/option><option value='CROPAUTO CROP SIDES'>Crop Sides<\/option><option value='CROPAUTO CROP THRESHOLD'>Crop Threshold<\/option><option value='Scale,width to scale the image to,height to scale the image to'>Scale<\/option><option value='Rotate,anticlockwise angle in degrees,colour of the uncovered zone after the rotation'>Rotate<\/option><option value='Copymerge,\" . \"$\" . \"oimo,x-coordinate of destination point,y-coordinate of destination point,x-coordinate of source point,y-coordinate of source point,source width,source height,percentage application'>Copy Merge<\/option><option value='Copyresized,\" . \"$\" . \"oimo,x-coordinate of destination point,y-coordinate of destination point,x-coordinate of source point,y-coordinate of source point,destination width,destination height,source width,source height'>Copy Resized<\/option><option value='Fill,x-coordinate of start point,y-coordinate of start point,colour to fill with'>Fill<\/option><\/select><\/p>\n<p> &#8230; into <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-----------------------------------GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php-----------------------------------GETME\" rel=\"noopener\">tutorial_to_animated_gif.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator' rel=\"noopener\">Animated GIF Creator<\/a> PHP web application.  We found it more user friendly to tailor the asking of numerical parameters for these GD calls work via &#8230;<\/p>\n<p>&lt;?php<br \/>\n<code><br \/>\n $gfcds='';<br \/>\n $gdfs=[];<br \/>\n if (strpos(($imvgn . $imafn . $imqty . $imgds), '|') !== false) {<br \/>\n    $gdfs=explode(';', trim(explode('|', $imvgn . $imafn . $imqty . $imgds)[1]));<br \/>\n    for ($itf=0; $itf&lt;sizeof($gdfs); $itf++) {<br \/>\n     if (trim($gdfs[$itf]) != '') {<br \/>\n      if (trim($gdfs[$itf]) == strtolower(trim($gdfs[$itf]))) {<br \/>\n      $gfcds.=chr(10) . \" imagefilter(\" . \"$\" . \"oimo, IMG_FILTER_\" . strtoupper(trim($gdfs[$itf])) . \"); \" . chr(10);<br \/>\n      } else if (trim($gdfs[$itf]) == strtoupper(trim($gdfs[$itf]))) {<br \/>\n      $gfcds.=chr(10) . \" image\" . explode(',',explode(\" \",strtolower(trim($gdfs[$itf])))[0])[0] . \"(\" . \"$\" . \"oimo, IMG_\" . str_replace(\" \",\"_\",strtoupper(trim(  str_replace(explode(' ',$gdfs[$itf])[0] . ' ','',$gdfs[$itf])   ))) . \"); \" . chr(10);<br \/>\n      } else if (strpos(strtoupper(trim($gdfs[$itf])), \"SCALE\") !== false) {<br \/>\n      $gfcds.=chr(10) . \" $\" . \"oimo=image\" . explode(',',explode(\" \",strtolower(trim($gdfs[$itf])))[0])[0] . \"(\" . \"$\" . \"oimo\" . str_replace(\" \",\"_\",(trim(  str_replace(explode(',',explode(\" \",(trim($gdfs[$itf])))[0])[0],'',$gdfs[$itf])   ))) . \"); \" . chr(10);<br \/>\n      } else if (strpos(strtoupper(trim($gdfs[$itf])), \"COPY\") === false) {<br \/>\n      $gfcds.=chr(10) . \" image\" . explode(',',explode(\" \",strtolower(trim($gdfs[$itf])))[0])[0] . \"(\" . \"$\" . \"oimo\" . str_replace(\" \",\"_\",(trim(  str_replace(explode(',',explode(\" \",(trim($gdfs[$itf])))[0])[0],'',$gdfs[$itf])   ))) . \"); \" . chr(10);<br \/>\n      } else {<br \/>\n      $gfcds.=chr(10) . \" image\" . explode(',',explode(\" \",strtolower(trim($gdfs[$itf])))[0])[0] . \"(\" . \"$\" . \"oimo\" . \",\" . \"$\" . \"oimo\" . explode(\",\" . \"$\" . \"oimo\", $gdfs[$itf])[1] . \"); \" . chr(10);<br \/>\n      }<br \/>\n     }<br \/>\n    }<br \/>\n }<br \/>\n<\/code><br \/>\n?&gt;<\/p>\n<p> &#8230; to work with <font color=blue>modified PHP writes PHP<\/font> of the ilk &#8230;<\/p>\n<p>&lt;?php echo &#8221;<br \/>\n<code><br \/>\nfunction ourimagecreatefromstring(\\$inidis) {<br \/>\nglobal \\$imvgn, \\$imafn, \\$imqty, \\$imgds, \\$gfcds;<br \/>\n  if ((\\$imvgn . \\$imafn . \\$imqty . \\$imgds) != '' && strpos(\\$inidis, ';base64,') !== false) {<br \/>\n    \\$extis=str_replace('jpeg','jpg',explode('\/', explode(';base64,', \\$inidis)[0])[1]);<br \/>\n    \\$inextis=\\$extis;<br \/>\n    \\$sofarout='\/tmp\/imtmp.' . \\$extis;<br \/>\n    foreach (glob('\/tmp\/imtmp.*') as \\$imfilename) {<br \/>\n       unlink(\\$imfilename);<br \/>\n    }<br \/>\n    file_put_contents(\\$sofarout, base64_encode(explode(';base64,', \\$inidis)[1]));<br \/>\n    \\$fzis=filesize(\\$sofarout);<br \/>\n    if (trim(explode('|', \\$imvgn . \\$imafn . \\$imqty . \\$imgds)[0]) != '') {<br \/>\n    exec('\" . $immogpath . \"mogrify ' . explode('|', \\$imvgn . \\$imafn . \\$imqty . \\$imgds)[0] . ' \/tmp\/imtmp.' . \\$extis);<br \/>\n    }<br \/>\n    foreach (glob('\/tmp\/imtmp.*') as \\$imfilename) {<br \/>\n       if (filesize(\\$imfilename) != \\$fzis) {  \/\/ strpos(\\$imfilename, '.' . \\$extis) === false ||<br \/>\n         \\$sofarout=\\$imfilename;<br \/>\n         \\$extis=explode('.', \\$imfilename)[1];<br \/>\n       }<br \/>\n    }<br \/>\n    \\$oimo=null;<br \/>\n    if (strtolower(\\$extis) == 'png') {<br \/>\n      \\$oimo=imagecreatefrompng('\/tmp\/imtmp.' . \\$extis); <font color=blue>\" . $gfcds . \"<\/font><br \/>\n    } else if (strtolower(\\$extis) == 'bmp') {<br \/>\n      \\$oimo=imagecreatefrombmp('\/tmp\/imtmp.' . \\$extis); <font color=blue>\" . $gfcds . \"<\/font><br \/>\n    } else if (strtolower(\\$extis) == 'gif') {<br \/>\n      \\$oimo=imagecreatefromgif('\/tmp\/imtmp.' . \\$extis); <font color=blue>\" . $gfcds . \"<\/font><br \/>\n    } else if (strpos(strtolower(\\$extis), 'jp') !== false) {<br \/>\n      \\$oimo=imagecreatefromjpeg('\/tmp\/imtmp.' . \\$extis); <font color=blue>\" . $gfcds . \"<\/font><br \/>\n    }<br \/>\n    if (\\$oimo) { return \\$oimo; }<br \/>\n  } else if ((\\$imvgn . \\$imafn . \\$imqty . \\$imgds) != '') {<br \/>\n    \\$extis=str_replace('jpeg','jpg','\" . $inextis . \"');<br \/>\n    \\$inextis=\\$extis;<br \/>\n    \\$sofarout='\/tmp\/imtmp.' . \\$extis;<br \/>\n    foreach (glob('\/tmp\/imtmp.*') as \\$imfilename) {<br \/>\n       unlink(\\$imfilename);<br \/>\n    }<br \/>\n    file_put_contents(\\$sofarout, \\$inidis);<br \/>\n    \\$fzis=filesize(\\$sofarout);<br \/>\n    if (strpos(strtolower((\\$imvgn . \\$imafn . \\$imqty . \\$imgds)), '-format ') === false) { \\$imvgn.=' -format \" . str_replace('jpg','jpeg',$inextis) . \" ';  }<br \/>\n    if (trim(explode('|', \\$imvgn . \\$imafn . \\$imqty . \\$imgds)[0]) != '') {<br \/>\n    exec('\" . $immogpath . \"mogrify ' . explode('|', \\$imvgn . \\$imafn . \\$imqty . \\$imgds)[0] . ' \/tmp\/imtmp.' . \\$extis);<br \/>\n    }<br \/>\n    foreach (glob('\/tmp\/imtmp.*') as \\$imfilename) {<br \/>\n       if (filesize(\\$imfilename) != \\$fzis) {  \/\/ strpos(\\$imfilename, '.' . \\$extis) === false) {<br \/>\n         \\$sofarout=\\$imfilename;<br \/>\n         \\$extis=explode('.', \\$imfilename)[1];<br \/>\n       }<br \/>\n    }<br \/>\n    \\$oimo=null;<br \/>\n    if (strtolower(\\$extis) == 'png') {<br \/>\n      \\$oimo=imagecreatefrompng('\/tmp\/imtmp.' . \\$extis);  <font color=blue>\" . $gfcds . \"<\/font><br \/>\n    } else if (strtolower(\\$extis) == 'bmp') {<br \/>\n      \\$oimo=imagecreatefrombmp('\/tmp\/imtmp.' . \\$extis);  <font color=blue>\" . $gfcds . \"<\/font><br \/>\n    } else if (strtolower(\\$extis) == 'gif') {<br \/>\n      \\$oimo=imagecreatefromgif('\/tmp\/imtmp.' . \\$extis);  <font color=blue>\" . $gfcds . \"<\/font><br \/>\n    } else if (strpos(strtolower(\\$extis), 'jp') !== false) {<br \/>\n      \\$oimo=imagecreatefromjpeg('\/tmp\/imtmp.' . \\$extis);  <font color=blue>\" . $gfcds . \"<\/font><br \/>\n    }<br \/>\n    if (\\$oimo) { return \\$oimo; }<br \/>\n  }<br \/>\n  return imagecreatefromstring(\\$inidis);<br \/>\n}<br \/>\n<\/code><br \/>\n&#8220;; &#8220;?&gt;<\/p>\n<p> &#8230; and to get there clientwise, in the Javascript &#8230;<\/p>\n<p><code><br \/>\nfunction gdadd(oselo) {<br \/>\n var pari=1, thispari='0';<br \/>\n if (oselo.value != '') {<br \/>\n  \/\/alert(oselo.value);<br \/>\n  var oselovalue=oselo.value.replace(',' + '$' + 'oimo','~' + '$' + 'oimo').split(',')[0];<br \/>\n  \/\/alert(oselovalue);<br \/>\n  var oseloval=oselo.value;<br \/>\n  if (document.getElementById('imgds')) { if (document.getElementById('imgds').value == '') { document.getElementById('imgds').value='|';  } else { document.getElementById('imgds').value+=';'; } }<br \/>\n  oseloval=oseloval.replace(',' + '$' + 'oimo','~' + '$' + 'oimo');<br \/>\n  oseloval=oseloval.replace(oseloval.split(',')[0], '');<br \/>\n  while (oseloval.indexOf(',') != -1) {<br \/>\n  \/\/alert(oseloval);<br \/>\n      if ((oseloval + ' ').substring(1).split(',')[0].trim() != '') {<br \/>\n      if ((' ' + (oseloval + ' ').substring(1).split(',')[0].trim() + ' ').toLowerCase().indexOf(' colour ') != -1) {<br \/>\n      thispari=prompt('Enter' + (' ' + (oseloval + ' ').substring(1).split(',')[0].trim() + ' ').toLowerCase().replace(' colour ', ' red,green,blue colour ') + 'parameter for GD ' + oselo.value.split(',')[0] + ' ' + pari + ' of ' + eval(-1 + oselo.value.replace(',' + '$' + 'oimo','').split(',').length)  + '?', '0');<br \/>\n      if (thispari == null) {<br \/>\n        thispari='0';<br \/>\n      } else if (thispari.trim() == '') {<br \/>\n        thispari='0';<br \/>\n      } else if (thispari.indexOf(',') == -1) {<br \/>\n        oselovalue+=',' + thispari + '';<br \/>\n      } else {<br \/>\n        oselovalue+=',imagecolorallocate(' + '$' + 'oimo,' + thispari + ')';<br \/>\n      }<br \/>\n      } else {<br \/>\n      thispari=prompt('Enter ' + (oseloval + ' ').substring(1).split(',')[0].trim() + ' parameter for GD ' + oselo.value.split(',')[0] + ' ' + pari + ' of ' + eval(-1 + oselo.value.replace(',' + '$' + 'oimo','').split(',').length)  + '?', '0');<br \/>\n      if (thispari == null) {<br \/>\n        thispari='0';<br \/>\n      } else {<br \/>\n        oselovalue+=',' + thispari;<br \/>\n      }<br \/>\n      }<br \/>\n      oseloval=oseloval.replace(',' + (oseloval + ' ').substring(1).split(',')[0].trim(),'').trim();<br \/>\n      } else {<br \/>\n      thispari=prompt('Enter numerical parameter for GD ' + oselo.value.split(',')[0] + ' ' + pari + ' of ' + eval(-1 + oselo.value.replace(',' + '$' + 'oimo','').split(',').length)  + '?', '0');<br \/>\n      oseloval=oseloval.replace(',','');<br \/>\n      if (thispari == null) {<br \/>\n        thispari='0';<br \/>\n      } else {<br \/>\n        oselovalue+=',' + thispari;<br \/>\n      }<br \/>\n      }<br \/>\n      \/\/oseloval=oseloval.replace(oseloval.split(',')[0] + ',', '');<br \/>\n      \/\/oseloval=oseloval.replace(',','');<br \/>\n      pari++;<br \/>\n  }<br \/>\n  if (document.getElementById('gdopt')) {<br \/>\n    document.getElementById('gdopt').innerHTML+='&nbsp;&nbsp;' + oselovalue.replace('~',',');<br \/>\n  }<br \/>\n  if (document.getElementById('imgds')) {<br \/>\n    document.getElementById('imgds').value+=oselovalue.replace('~',',');<br \/>\n    \/\/document.getElementById('imgds').style.display='inline-block';<br \/>\n    \/\/document.getElementById('imgds').style.width='300px';<br \/>\n    if (document.getElementById('smyim').innerHTML == '') {  document.getElementById('smyim').innerHTML='ImageMagick switches: '; }<br \/>\n  } else if (document.getElementById('myim')) {<br \/>\n    document.getElementById('myim').innerHTML='&lt;span is=smyim&gt;ImageMagick switches: &lt;\/span&gt;&lt;input id=imqty name=imqty type=text style=display:inline-block; value=\\\"\\\"&gt;&lt;\/input&gt;&lt;input id=imgds name=imgds type=hidden style=display:inline-block; value=\\\"|' + oselovalue.replace('~',',') + '\\\"&gt;&lt;\/input&gt;';<br \/>\n    document.getElementById('imqty').style.width='300px';<br \/>\n  }<br \/>\n  oselo.value='';<br \/>\n }<br \/>\n}<br \/>\n<\/code><\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-gd-transformations-interfacing-tutorial\/' rel=\"noopener\">Animated GIF Creator GD Transformations Interfacing Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifcgdfit'>Previous relevant <a target=\"_blank\" title='Animated GIF Creator GD Filter Interfacing Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-gd-filter-interfacing-tutorial\/' rel=\"noopener\">Animated GIF Creator GD Filter Interfacing Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" id='qmgti' style=\"float:left; border: 15px solid pink;\" alt=\"Animated GIF Creator GD Filter Interfacing Tutorial\"  src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/ttag_gd_interfacing.jpg\" title=\"Animated GIF Creator GD Filter Interfacing Tutorial\" \/><\/a><p class=\"wp-caption-text\">Animated GIF Creator GD Filter Interfacing Tutorial<\/p><\/div>\n<p>We are into image modification on the way to creating &#8220;compiled&#8221; animated GIF images, at the moment.  Yesterday&#8217;s <a title='Animated GIF Creator ImageMagick Interfacing Tutorial' href='#agifcimit'>Animated GIF Creator ImageMagick Interfacing Tutorial<\/a> got us interfacing (or integrating) &#8230;<\/p>\n<ul>\n<li><a target=\"_blank\" href='http:\/\/imagemagick.org\/index.php' rel=\"noopener\">ImageMagick<\/a> batch processing &#8220;mogrify&#8221; ideas &#8230; and, today, it is the turn of &#8230;<\/li>\n<li><a target=\"_blank\" title='PHP GD' href='https:\/\/www.php.net\/manual\/en\/function.gd-info.php' rel=\"noopener\">GD<\/a> image filters &#8230;<br \/>\n<select size=13><option value='grayscale'>Grayscale<\/option><option value='negate'>Negate<\/option><option value='emboss'>Emboss<\/option><option value='edgedetect'>Edge Detect<\/option><option value='brightness,'>Brightness<\/option><option value='contrast,'>Contrast<\/option><option value='smooth,'>Smooth<\/option><option value='colorize,,,'>Colourize<\/option><option value='pixelate,'>Pixelate<\/option><option value='scatter,,'>Scatter<\/option><option value='mean_removal'>Mean Removal<\/option><option value='selective_blur'>Selective Blur<\/option><option value='gaussian_blur'>Gaussian Blur<\/option><\/select>\n<\/li>\n<\/ul>\n<p> &#8230; into <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php----------------------------------GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php----------------------------------GETME\" rel=\"noopener\">tutorial_to_animated_gif.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator' rel=\"noopener\">Animated GIF Creator<\/a> PHP web application.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-gd-filter-interfacing-tutorial\/' rel=\"noopener\">Animated GIF Creator GD Filter Interfacing Tutorial<\/a>.<\/p-->\n<hr>\n<p id='agifcimit'>Previous relevant <a target=\"_blank\" title='Animated GIF Creator ImageMagick Interfacing Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-imagemagick-interfacing-tutorial\/' rel=\"noopener\">Animated GIF Creator ImageMagick Interfacing Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php\" rel=\"noopener\"><img decoding=\"async\" id='qmgti' style=\"float:left; border: 15px solid pink;\" alt=\"Animated GIF Creator ImageMagick Interfacing Tutorial\"  src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/ttag_im_interfacing.jpg\" title=\"Animated GIF Creator ImageMagick Interfacing Tutorial\" \/><\/a><p class=\"wp-caption-text\">Animated GIF Creator ImageMagick Interfacing Tutorial<\/p><\/div>\n<p>Yes, you guessed it!  On top of yesterday&#8217;s <a title='ImageMagick Vignette Primer Tutorial' href='#imvpt'>ImageMagick Vignette Primer Tutorial<\/a>, today we want to interface the <a target=\"_blank\" href='http:\/\/imagemagick.org\/index.php' rel=\"noopener\">ImageMagick<\/a> batch processing &#8220;mogrify&#8221; ideas into <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php---------------------------------GETME\" rel=\"noopener\">our changed<\/a> <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php---------------------------------GETME\" rel=\"noopener\">tutorial_to_animated_gif.php<\/a> inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator' rel=\"noopener\">Animated GIF Creator<\/a> PHP web application.<\/p>\n<p>&#8220;Interfacing&#8221; (or integrating) into code often has you asking the question &#8230;<\/p>\n<p><code><br \/>\nWhere do we intervene to place our logic?<br \/>\n<\/code><\/p>\n<p>We&#8217;ve decided to &#8220;wrap&#8221; our PHP <a target=\"_blank\" title='PHP GD' href='https:\/\/www.php.net\/manual\/en\/function.gd-info.php' rel=\"noopener\">GD<\/a> calls &#8230;<\/p>\n<ul>\n<li><a target=\"_blank\" href='https:\/\/www.php.net\/manual\/en\/function.imagecreatefromstring.php' rel=\"noopener\">imagecreatefromstring<\/a><\/li>\n<li><a target=\"_blank\" href='https:\/\/www.php.net\/manual\/en\/function.imagecreatefromjpeg.php' rel=\"noopener\">imagecreatefromjpeg<\/a><\/li>\n<li><a target=\"_blank\" href='https:\/\/www.php.net\/manual\/en\/function.imagecreatefrompng.php' rel=\"noopener\">imagecreatefrompng<\/a><\/li>\n<li><a target=\"_blank\" href='https:\/\/www.php.net\/manual\/en\/function.imagecreatefromgif.php' rel=\"noopener\">imagecreatefromgif<\/a><\/li>\n<li><a target=\"_blank\" href='https:\/\/www.php.net\/manual\/en\/function.imagecreatefrombmp.php' rel=\"noopener\">imagecreatefrombmp<\/a><\/li>\n<\/ul>\n<p> &#8230; into inhouse &#8220;our&#8221; prefixed function versions as per (PHP writing out PHP) &#8230;<\/p>\n<p>&lt;?php echo &#8221;<br \/>\n<code><br \/>\n \\$imvgn='\" . $imvgn . \"'; \/\" . \"\/ vignette factor<br \/>\n \\$imafn='\" . $imafn . \"'; \/\" . \"\/ affine transformation<br \/>\n \\$imqty='\" . $imqty . \"'; \/\" . \"\/ image conversion and\/or quality RE jpeg<br \/>\n<br \/> <br \/>\nfunction ourimagecreatefromstring(\\$inidis) {<br \/>\nglobal \\$imvgn, \\$imafn, \\$imqty;<br \/>\n  if ((\\$imvgn . \\$imafn . \\$imqty) != '' && strpos(\\$inidis, ';base64,') !== false) {<br \/>\n    \\$extis=str_replace('jpeg','jpg',explode('\/', explode(';base64,', \\$inidis)[0])[1]);<br \/>\n    \\$inextis=\\$extis;<br \/>\n    \\$sofarout='\/tmp\/imtmp.' . \\$extis;<br \/>\n    foreach (glob('\/tmp\/imtmp.*') as \\$imfilename) {<br \/>\n       unlink(\\$imfilename);<br \/>\n    }<br \/>\n    file_put_contents(\\$sofarout, base64_encode(explode(';base64,', \\$inidis)[1]));<br \/>\n    \\$fzis=filesize(\\$sofarout);<br \/>\n    exec('\" . $immogpath . \"mogrify ' . \\$imvgn . \\$imafn . \\$imqty . ' \/tmp\/imtmp.' . \\$extis);<br \/>\n    foreach (glob('\/tmp\/imtmp.*') as \\$imfilename) {<br \/>\n       if (filesize(\\$imfilename) != \\$fzis) {  \/\/ strpos(\\$imfilename, '.' . \\$extis) === false ||<br \/>\n         \\$sofarout=\\$imfilename;<br \/>\n         \\$extis=explode('.', \\$imfilename)[1];<br \/>\n       }<br \/>\n    }<br \/>\n    if (strtolower(\\$extis) == 'png') {<br \/>\n      return imagecreatefrompng('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strtolower(\\$extis) == 'bmp') {<br \/>\n      return imagecreatefrombmp('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strtolower(\\$extis) == 'gif') {<br \/>\n      return imagecreatefromgif('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strpos(strtolower(\\$extis), 'jp') !== false) {<br \/>\n      return imagecreatefromjpeg('\/tmp\/imtmp.' . \\$extis);<br \/>\n    }<br \/>\n  } else if ((\\$imvgn . \\$imafn . \\$imqty) != '') {<br \/>\n    \\$extis=str_replace('jpeg','jpg','\" . $inextis . \"');<br \/>\n    \\$inextis=\\$extis;<br \/>\n    \\$sofarout='\/tmp\/imtmp.' . \\$extis;<br \/>\n    foreach (glob('\/tmp\/imtmp.*') as \\$imfilename) {<br \/>\n       unlink(\\$imfilename);<br \/>\n    }<br \/>\n    file_put_contents(\\$sofarout, \\$inidis);<br \/>\n    \\$fzis=filesize(\\$sofarout);<br \/>\n    if (strpos(strtolower((\\$imvgn . \\$imafn . \\$imqty)), '-format ') === false) { \\$imvgn.=' -format \" . str_replace('jpg','jpeg',$inextis) . \" ';  }<br \/>\n    exec('\" . $immogpath . \"mogrify ' . \\$imvgn . \\$imafn . \\$imqty . ' \/tmp\/imtmp.' . \\$extis);<br \/>\n    foreach (glob('\/tmp\/imtmp.*') as \\$imfilename) {<br \/>\n       if (filesize(\\$imfilename) != \\$fzis) {  \/\/ strpos(\\$imfilename, '.' . \\$extis) === false) {<br \/>\n         \\$sofarout=\\$imfilename;<br \/>\n         \\$extis=explode('.', \\$imfilename)[1];<br \/>\n       }<br \/>\n    }<br \/>\n    if (strtolower(\\$extis) == 'png') {<br \/>\n      return imagecreatefrompng('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strtolower(\\$extis) == 'bmp') {<br \/>\n      return imagecreatefrombmp('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strtolower(\\$extis) == 'gif') {<br \/>\n      return imagecreatefromgif('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strpos(strtolower(\\$extis), 'jp') !== false) {<br \/>\n      return imagecreatefromjpeg('\/tmp\/imtmp.' . \\$extis);<br \/>\n    }<br \/>\n  }<br \/>\n  return imagecreatefromstring(\\$inidis);<br \/>\n}<br \/>\n<br \/>\nfunction ourimagecreatefromjpeg(\\$inidis) {<br \/>\nglobal \\$imvgn, \\$imafn, \\$imqty;<br \/>\n  if ((\\$imvgn . \\$imafn . \\$imqty) != '') {<br \/>\n    \\$extis='jpg';<br \/>\n    \\$inextis=\\$extis;<br \/>\n    \\$sofarout='\/tmp\/imtmp.' . \\$extis;<br \/>\n    foreach (glob('\/tmp\/imtmp.*') as \\$imfilename) {<br \/>\n       unlink(\\$imfilename);<br \/>\n    }<br \/>\n    file_put_contents(\\$sofarout, \\$inidis);<br \/>\n    \\$fzis=filesize(\\$sofarout);<br \/>\n    exec('\" . $immogpath . \"mogrify ' . \\$imvgn . \\$imafn . \\$imqty . ' \/tmp\/imtmp.' . \\$extis);<br \/>\n    foreach (glob('\/tmp\/imtmp.*') as \\$imfilename) {<br \/>\n       if (filesize(\\$imfilename) != \\$fzis) {  \/\/ strpos(\\$imfilename, '.' . \\$extis) === false) {<br \/>\n         \\$sofarout=\\$imfilename;<br \/>\n         \\$extis=explode('.', \\$imfilename)[1];<br \/>\n       }<br \/>\n    }<br \/>\n    if (strtolower(\\$extis) == 'png') {<br \/>\n      return imagecreatefrompng('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strtolower(\\$extis) == 'bmp') {<br \/>\n      return imagecreatefrombmp('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strtolower(\\$extis) == 'gif') {<br \/>\n      return imagecreatefromgif('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strpos(strtolower(\\$extis), 'jp') !== false) {<br \/>\n      return imagecreatefromjpeg('\/tmp\/imtmp.' . \\$extis);<br \/>\n    }<br \/>\n  }<br \/>\n  return imagecreatefromjpeg(\\$inidis);<br \/>\n}<br \/>\n<br \/>\nfunction ourimagecreatefrompng(\\$inidis) {<br \/>\nglobal \\$imvgn, \\$imafn, \\$imqty;<br \/>\n  if ((\\$imvgn . \\$imafn . \\$imqty) != '') {<br \/>\n    \\$extis='png';<br \/>\n    \\$inextis=\\$extis;<br \/>\n    \\$sofarout='\/tmp\/imtmp.' . \\$extis;<br \/>\n    foreach (glob('\/tmp\/imtmp.*') as \\$imfilename) {<br \/>\n       unlink(\\$imfilename);<br \/>\n    }<br \/>\n    file_put_contents(\\$sofarout, \\$inidis);<br \/>\n    \\$fzis=filesize(\\$sofarout);<br \/>\n    exec('\" . $immogpath . \"mogrify ' . \\$imvgn . \\$imafn . \\$imqty . ' \/tmp\/imtmp.' . \\$extis);<br \/>\n    foreach (glob('\/tmp\/imtmp.*') as \\$imfilename) {<br \/>\n       if (filesize(\\$imfilename) != \\$fzis) {  \/\/ strpos(\\$imfilename, '.' . \\$extis) === false) {<br \/>\n         \\$sofarout=\\$imfilename;<br \/>\n         \\$extis=explode('.', \\$imfilename)[1];<br \/>\n       }<br \/>\n    }<br \/>\n    if (strtolower(\\$extis) == 'png') {<br \/>\n      return imagecreatefrompng('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strtolower(\\$extis) == 'bmp') {<br \/>\n      return imagecreatefrombmp('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strtolower(\\$extis) == 'gif') {<br \/>\n      return imagecreatefromgif('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strpos(strtolower(\\$extis), 'jp') !== false) {<br \/>\n      return imagecreatefromjpeg('\/tmp\/imtmp.' . \\$extis);<br \/>\n    }<br \/>\n  }<br \/>\n  return imagecreatefrompng(\\$inidis);<br \/>\n}<br \/>\n<br \/>\nfunction ourimagecreatefromgif(\\$inidis) {<br \/>\nglobal \\$imvgn, \\$imafn, \\$imqty;<br \/>\n  if ((\\$imvgn . \\$imafn . \\$imqty) != '') {<br \/>\n    \\$extis='gif';<br \/>\n    \\$inextis=\\$extis;<br \/>\n    \\$sofarout='\/tmp\/imtmp.' . \\$extis;<br \/>\n    foreach (glob('\/tmp\/imtmp.*') as \\$imfilename) {<br \/>\n       unlink(\\$imfilename);<br \/>\n    }<br \/>\n    file_put_contents(\\$sofarout, \\$inidis);<br \/>\n    \\$fzis=filesize(\\$sofarout);<br \/>\n    exec('\" . $immogpath . \"mogrify ' . \\$imvgn . \\$imafn . \\$imqty . ' \/tmp\/imtmp.' . \\$extis);<br \/>\n    foreach (glob('\/tmp\/imtmp.*') as \\$imfilename) {<br \/>\n       if (filesize(\\$imfilename) != \\$fzis) {  \/\/ strpos(\\$imfilename, '.' . \\$extis) === false) {<br \/>\n         \\$sofarout=\\$imfilename;<br \/>\n         \\$extis=explode('.', \\$imfilename)[1];<br \/>\n       }<br \/>\n    }<br \/>\n    if (strtolower(\\$extis) == 'png') {<br \/>\n      return imagecreatefrompng('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strtolower(\\$extis) == 'bmp') {<br \/>\n      return imagecreatefrombmp('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strtolower(\\$extis) == 'gif') {<br \/>\n      return imagecreatefromgif('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strpos(strtolower(\\$extis), 'jp') !== false) {<br \/>\n      return imagecreatefromjpeg('\/tmp\/imtmp.' . \\$extis);<br \/>\n    }<br \/>\n  }<br \/>\n  return imagecreatefromgif(\\$inidis);<br \/>\n}<br \/>\n<br \/>\nfunction ourimagecreatefrombmp(\\$inidis) {<br \/>\nglobal \\$imvgn, \\$imafn, \\$imqty;<br \/>\n  if ((\\$imvgn . \\$imafn . \\$imqty) != '') {<br \/>\n    \\$extis='bmp';<br \/>\n    \\$inextis=\\$extis;<br \/>\n    \\$sofarout='\/tmp\/imtmp.' . \\$extis;<br \/>\n    foreach (glob('\/tmp\/imtmp.*') as \\$imfilename) {<br \/>\n       unlink(\\$imfilename);<br \/>\n    }<br \/>\n    file_put_contents(\\$sofarout, \\$inidis);<br \/>\n    \\$fzis=filesize(\\$sofarout);<br \/>\n    exec('\" . $immogpath . \"mogrify ' . \\$imvgn . \\$imafn . \\$imqty . ' \/tmp\/imtmp.' . \\$extis);<br \/>\n    foreach (glob('\/tmp\/imtmp.*') as \\$imfilename) {<br \/>\n       if (filesize(\\$imfilename) != \\$fzis) {  \/\/ strpos(\\$imfilename, '.' . \\$extis) === false) {<br \/>\n         \\$sofarout=\\$imfilename;<br \/>\n         \\$extis=explode('.', \\$imfilename)[1];<br \/>\n       }<br \/>\n    }<br \/>\n    if (strtolower(\\$extis) == 'png') {<br \/>\n      return imagecreatefrompng('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strtolower(\\$extis) == 'bmp') {<br \/>\n      return imagecreatefrombmp('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strtolower(\\$extis) == 'gif') {<br \/>\n      return imagecreatefromgif('\/tmp\/imtmp.' . \\$extis);<br \/>\n    } else if (strpos(strtolower(\\$extis), 'jp') !== false) {<br \/>\n      return imagecreatefromjpeg('\/tmp\/imtmp.' . \\$extis);<br \/>\n    }<br \/>\n  }<br \/>\n  return imagecreatefrombmp(\\$inidis);<br \/>\n}<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;<\/p>\n<p> &#8230; and change existant calls into (equivalent inhouse) &#8220;our&#8221; function calls as above.<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/animated-gif-creator-imagemagick-interfacing-tutorial\/' rel=\"noopener\">Animated GIF Creator ImageMagick Interfacing Tutorial<\/a>.<\/p-->\n<hr>\n<p id='imvpt'>Previous relevant <a target=\"_blank\" title='ImageMagick Vignette Primer Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/imagemagick-vignette-primer-tutorial\/' rel=\"noopener\">ImageMagick Vignette Primer Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/Mac\/pet_photos_jpg_to_quality_20_jpg_1100_820_180_copy.gif\" rel=\"noopener\"><img decoding=\"async\" id='qmgti' style=\"float:left; border: 15px solid pink;\" alt=\"ImageMagick Vignette Primer Tutorial\"  src=\"http:\/\/www.rjmprogramming.com.au\/Mac\/pet_photos_jpg_to_quality_20_jpg_1100_820_180_vignette_50.gif\" title=\"ImageMagick Vignette Primer Tutorial\" \/><\/a><p class=\"wp-caption-text\">ImageMagick Vignette Primer Tutorial<\/p><\/div>\n<p>Continuing on with the  <a target=\"_blank\" href='http:\/\/imagemagick.org\/index.php' rel=\"noopener\">ImageMagick<\/a> batch processing &#8220;mogrify&#8221; ideas of yesterday&#8217;s <a target=\"_blank\" title='ImageMagick Batch Image Conversion Affine Transformation Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/imagemagick-batch-image-conversion-affine-transformation-tutorial\/' rel=\"noopener\">ImageMagick Batch Image Conversion Affine Transformation Tutorial<\/a> and the <a target=\"_blank\" title='Vignette info from Wikipedia ... thanks' href='https:\/\/en.wikipedia.org\/wiki\/Vignetting' rel=\"noopener\">&#8220;vignette&#8221;<\/a> image editing ideas of <a title='Gimp Vignette Primer Tutorial' href='#gvpt'>Gimp Vignette Primer Tutorial<\/a>, as below, today, we took some pet photos with an iPad&#8217;s Camera app and shared them off the Photos app via two Mail sharing option emails containing seven attachments each.  Using an iPad, the JPEG &#8220;jpg&#8221; output files were too big for our inhouse <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/PHP\/animegif\/tutorial_to_animated_gif.php' title='Animated GIF Creator' rel=\"noopener\">Animated GIF Creator<\/a> PHP web application to handle, and so to perform the &#8230;<\/p>\n<ul>\n<li>animated GIF presentation, off these downloaded email photo attachments &#8230; and along the way &#8230;<\/li>\n<li>quality adjusted them (yes, &#8220;mogrify&#8221; does not stuff JPG to JPG conversions, and we used &#8220;mogrify&#8221; <i>-quality 20%<\/i> switch here) &#8230; and &#8230;<\/li>\n<li>rotate them 180 degrees (&#8220;mogrify&#8221; uses switches <i>-affine -1,0,0,-1,0,0 -transform +repage<\/i> here) &#8230; and &#8230;<\/li>\n<li>vignette 50% (&#8220;mogrify&#8221; uses switch <i>-vignette 50<\/i> here)<\/li>\n<\/ul>\n<p> &#8230; on the way to compiling into an animated GIF image, and we turned to ImageMagick again, using its affine transformation talents, along with its awesome vignetting talents &#8230;<\/p>\n<form title='mogrify -quality 20% petvignettes12\/*.jpg -comment \"Straight off iPad 3x smaller to 1100x820 pet_photos_jpg_to_quality_20_jpg_1100_820.gif\" ; mogrify -quality 20% -affine -1,0,0,-1,0,0 -transform +repage petvignettes12\/*.jpg -comment \"iPad 3x smaller to 1100x820 pet_photos_jpg_to_quality_20_jpg_1100_820_180.gif copied to pet_photos_jpg_to_quality_20_jpg_1100_820_180_copy.gif\" ; mogrify -quality 20% -affine -1,0,0,-1,0,0 -transform +repage -vignette 50 petvignettes12\/*.jpg -comment \"iPad 3x smaller to 1100x820 pet_photos_jpg_to_quality_20_jpg_1100_820_180_vignette_50.gif\" ; mogrify -vignette 50 petvignettes12\/*_copy.gif -comment \"pet_photos_jpg_to_quality_20_jpg_1100_820_180_copy.gif\"\n' target=vfiframe method=GET onsubmit=\"if (document.getElementById('vfsel').value != '') { document.getElementById('vfiframe').style.display='block';    document.getElementById('vfiframe').src='\/\/www.rjmprogramming.com.au\/Mac\/' + document.getElementById('vfsel').value.toLowerCase(); return false; } return false;\" action='.\/'><br \/>\n<select style='font-size:8px;' onchange=\"document.getElementById('vfiframe').title=this.innerHTML.split(String.fromCharCode(34) + this.value + String.fromCharCode(34) + '')[1].substring(1).split('<')[0]; document.getElementById('vdisplay').click();\" size=5 name=vfsel id=vfsel><option value=\"pet_photos_jpg_to_quality_20_jpg_1100_820.GIF\">Please choose an ImageMagick batch mogrify JPG to JPG with Affine Transformation and\/or Vignetting command below<\/option><option value=\"pet_photos_jpg_to_quality_20_jpg_1100_820.gif\">mogrify -quality 20% petvignettes12\/*.jpg -comment &#8220;Straight off iPad 3x smaller to 1100&#215;820 pet_photos_jpg_to_quality_20_jpg_1100_820.gif&#8221;<\/option><option value=\"pet_photos_jpg_to_quality_20_jpg_1100_820_180.gif\">mogrify -quality 20% -affine -1,0,0,-1,0,0 -transform +repage petvignettes12\/*.jpg -comment &#8220;iPad 3x smaller to 1100&#215;820 pet_photos_jpg_to_quality_20_jpg_1100_820_180.gif copied to pet_photos_jpg_to_quality_20_jpg_1100_820_180_copy.gif&#8221;<\/option><option value=\"pet_photos_jpg_to_quality_20_jpg_1100_820_180_vignette_50.gif\">mogrify -quality 20% -affine -1,0,0,-1,0,0 -transform +repage -vignette 50 petvignettes12\/*.jpg -comment &#8220;iPad 3x smaller to 1100&#215;820 pet_photos_jpg_to_quality_20_jpg_1100_820_180_vignette_50.gif&#8221;<\/option><option value=\"pet_photos_jpg_to_quality_20_jpg_1100_820_180_copy.gif\">mogrify -vignette 50 petvignettes12\/*_copy.gif -comment &#8220;pet_photos_jpg_to_quality_20_jpg_1100_820_180_copy.gif&#8221;<\/option><\/select><br \/>\n<input type=submit value=Display id=vdisplay style=display:none;><\/input><br \/>\n<\/form>\n<p><img name=vfiframe id=vfiframe style=display:block;width:100%;height:100% src=http:\/\/www.rjmprogramming.com.au\/Mac\/pet_photos_jpg_to_quality_20_jpg_1100_820.gif title='mogrify -quality 20% petvignettes12\/*.jpg -comment \"Straight off iPad 3x smaller to 1100x820 pet_photos_jpg_to_quality_20_jpg_1100_820.gif\"'><\/img><\/p>\n<p> &#8230; where the last two dropdown options will be similar, the last showing the input image into ImageMagick can be an animated GIF that is truely treated like an animated GIF.<\/p>\n<p>By the way, should you be interested in photo orientation off a mobile device camera, have a read of <a target=\"_blank\" title='PHP Exif Image Information Revisit Tutorial' href='https:\/\/www.rjmprogramming.com.au\/ITblog\/php-exif-image-information-revisit-tutorial\/' rel=\"noopener\">PHP Exif Image Information Revisit Tutorial<\/a>.<\/p>\n<p>Nala and Luna and Charlie bid you a fond farewell!<\/p>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=\"_blank\" href='\/\/www.rjmprogramming.com.au\/ITblog\/imagemagick-vignette-primer-tutorial\/' rel=\"noopener\">ImageMagick Vignette Primer Tutorial<\/a>.<\/p-->\n<hr>\n<p id='gvpt'>Previous relevant <a target=\"_blank\" title='Gimp Vignette Primer Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/gimp-vignette-primer-tutorial\/' rel=\"noopener\">Gimp Vignette Primer Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/GIMP\/Vignette\/\" rel=\"noopener\"><img decoding=\"async\" id='qmgti' style=\"float:left; border: 15px solid pink;\" alt=\"Gimp Vignette Primer Tutorial\"  src=\"http:\/\/www.rjmprogramming.com.au\/GIMP\/Vignette\/Vignette.jpg\" title=\"Gimp Vignette Primer Tutorial\" \/><\/a><p class=\"wp-caption-text\">Gimp Vignette Primer Tutorial<\/p><\/div>\n<p>The last time we talked about the miraculous, redolent and amazing image editor called <a target=\"_blank\" href='http:\/\/www.gimp.org' title='Gimp, or GIMP' rel=\"noopener\">Gimp<\/a> am sure there was someone in a shower &#8230; it stands to reason &#8230; and one of those showerers, surely, would have been singing <a target=\"_blank\" title='The Gimp Song' href='https:\/\/www.youtube.com\/watch?v=NCR_klyeqCc' rel=\"noopener\">The Gimp Song<\/a> &#8230; and if not &#8230; why not? &#8230; but we digress &#8230; anyway we had the  <a target=\"_blank\" href='#gtpt' title='Gimp Transparency Primer Tutorial' rel=\"noopener\">Gimp Transparency Primer Tutorial<\/a> as shown below go into some image transparency issues with Gimp.<\/p>\n<p>In today&#8217;s <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/GIMP\/Vignette\/\" title=\"Click picture\" rel=\"noopener\">tutorial<\/a> we make use of a great tutorial (even so far as with direct quotes below) called <a target=\"_blank\" title='Gimp Vignette tutorial' href='http:\/\/www.wikihow.com\/Add-a-Vignette-to-a-Photograph-with-GIMP' rel=\"noopener\">Add a Vignette to a Photograph with GIMP<\/a> (thanks) to try a photographic technique called <a target=\"_blank\" title='Vignetting information via Wikipedia ... thanks' href='http:\/\/en.wikipedia.org\/wiki\/Vignetting' rel=\"noopener\">vignetting<\/a> on one of the photographs we added, recently, into the mix of those of the Custom Header Image mix at this blog &#8230; specifically the one of Nala, the dog, on the door ledge.  Need to warn you here and now that if there was the time all over again, it would be better achieved that second time around, but this is not the point with learning, but rather getting some starting point with a great &#8220;product&#8221; like Gimp, and trying it yourself, once you have a method.  It boils down to:<\/p>\n<ol>\n<li>Open Gimp graphical editor application<\/li>\n<li>File-&gt;Open &#8230; pick your image file<\/li>\n<li>Layer-&gt;New Layer (we&#8217;ll call &#8220;Vg&#8221;) &#8230; pick Foreground Colour<\/li>\n<li>In the Layers dialog, click on your &#8220;Vg&#8221; layer to select it, and select Soft light from the &#8220;Mode&#8221; drop-down box<\/li>\n<li>Right click on your &#8220;Vg&#8221; layer and go to Add Layer Mask. In the dialog that pops up, you want &#8220;Initialise Layer Mask to&#8221; set to &#8220;White (full opacity)&#8221;. Click &#8220;Add&#8221;<\/li>\n<li>Below Opacity bar select Link icon next to Eye icon, which will already be showing<\/li>\n<li>Use the freeform select tool (press F to bring this up) and draw a selection somewhere around the primary point of interest in your photo<\/li>\n<li>Use your bucket tool (Shift+B) and click within the selection to fill it<\/li>\n<li>Deselect your selection with Select-&gt;None<\/li>\n<li>Go to Filters-&gt;Blur-&gt;Gaussian Blur. In the dialog that comes up, you want &#8220;Radius&#8221; set to a very large amount; a tenth of the longest edge of the photo is not too much<\/li>\n<li>Click on your &#8220;Vg&#8221; layer to select it (if it isn&#8217;t already selected), and then slide the opacity slider towards the right until the effect is subtle enough. Our (ever so subtle) example of Nala, in the tutorial, used an opacity of about 66%<\/li>\n<li>Click Export button in two windows (NB. this overwrites the image file, so if this is not desirable, export to a different image file name and\/or type)<\/li>\n<\/ol>\n<p>Here is an image comparison <a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/GIMP\/Vignette\/beforeafter.html\" title='Before and After' rel=\"noopener\">link<\/a>.<\/p>\n<p>As with most Gimp ideas, jump in and give it a go, as you&#8217;ll find your own ways and means of using this great product &#8230; am pretty sure.<\/p>\n<p>Link to Gimp &#8220;spiritual home&#8221; &#8230; <a target=\"_blank\" href='http:\/\/www.gimp.org' title='Gimp' rel=\"noopener\">here<\/a>.<br \/>\nLink to Gimp forum &#8230; <a target=\"_blank\" href='http:\/\/gimpforums.com\/' title='Google Geo Charts' rel=\"noopener\">here<\/a>.<\/p>\n<hr \/>\n<p id='gtpt'>Previous relevant <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/wordpress\/?p=9389' title='Gimp Transparency Primer Tutorial' rel=\"noopener\">Gimp Transparency Primer Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/GIMP\/Transparency\/\" rel=\"noopener\"><img decoding=\"async\" id='mgti' style=\"float:left; border: 15px solid pink;\" alt=\"Gimp Transparency Primer Tutorial\" onmouseover=\" this.src = this.src.replace('97of.jpg','77of.JPG').replace('77of.jpg','97of.jpg').replace('.JPG','.jpg'); \" src=\"http:\/\/www.rjmprogramming.com.au\/GIMP\/Transparency\/Gimp_Transparency-97of.jpg\" title=\"Gimp Transparency Primer Tutorial\" \/><\/a><p class=\"wp-caption-text\">Gimp Transparency Primer Tutorial<\/p><\/div>\n<p>Here is a tutorial that adds to a previous <a target=\"_blank\" href='#glpt' title='Gimp Layers Primer Tutorial' rel=\"noopener\">Gimp Layers Primer Tutorial<\/a> as shown below, and gives you more insight into the massive possibilities of using a sophisticated image editor and use layers with various amounts of transparency, especially suited to use with png image files.<\/p>\n<p>Today&#8217;s tutorial where we construct a Birthday Card that needs tweaking for the words in front to be seen a bit more clearly, by making the image behind a bit more transparent, changes the transparency of a single image via:<\/p>\n<ol>\n<li>Open Gimp graphical editor application<\/li>\n<li>File-&gt;Open Layers &#8230; pick your image file<\/li>\n<li>If Layers window not showing, make it show via Windows-&gt;Layers &#8211; Brushes<\/li>\n<li>Below Opacity bar select Link icon next to Eye icon, which will already be showing<\/li>\n<li>Change Opacity bar setting to a value of Transparency (100% is Opaque, 0% is Transparent) that suits &#8230; today we do 70%<\/li>\n<li>File-&gt;Export<\/li>\n<li>Click Export button in two windows (NB. this overwrites the image file, so if this is not desirable, export to a different image file name and\/or type)<\/li>\n<\/ol>\n<p>As with most Gimp ideas, jump in and give it a go, as you&#8217;ll find your own ways and means of using this great product &#8230; am pretty sure.<\/p>\n<p>Link to Gimp &#8220;spiritual home&#8221; &#8230; <a target=\"_blank\" href='http:\/\/www.gimp.org' title='Gimp' rel=\"noopener\">here<\/a>.<br \/>\nLink to Gimp forum &#8230; <a target=\"_blank\" href='http:\/\/gimpforums.com\/' title='Google Geo Charts' rel=\"noopener\">here<\/a>.<\/p>\n<hr \/>\n<p id='glpt'>Previous relevant <a target=\"_blank\" href='http:\/\/www.rjmprogramming.com.au\/wordpress\/?p=5366' title='Gimp Layers Primer Tutorial' rel=\"noopener\">Gimp Layers Primer Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=\"_blank\" href=\"http:\/\/www.rjmprogramming.com.au\/GIMP\/Layers\/GimpLayers.m4v\" rel=\"noopener\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Gimp Layers Primer Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/GIMP\/Layers\/GimpLayers.jpg\" title=\"Gimp Layers Primer Tutorial\" \/><\/a><p class=\"wp-caption-text\">Gimp Layers Primer Tutorial<\/p><\/div>\n<p>Here is a tutorial that gives you an insight into the massive possibilities of using a sophisticated image editor and use layers with various amounts of transparency, especially suited to use with png image files.<\/p>\n<p>Transparency (or its obverse, opacity) can be used to have the one image achieve several &#8220;ends&#8221; (ie. purposes).  Although it is a bit of a clumsy example in the tutorial, you can see that the technique can be used for artistic purposes &#8230; often called &#8220;Photoshopping&#8221; (named after the more famous, and also brilliant, rival product, Photoshop).<\/p>\n<p>Lots of those classic &#8220;Photoshopping&#8221; techniques can be achieved in Gimp, and some other <a target=\"_blank\" title='Gimp tutorials here' href='http:\/\/www.rjmprogramming.com.au\/wordpress\/?cat=4' rel=\"noopener\">tutorials<\/a> at this blog touch on that.<\/p>\n<p>Am sure you can imagine what the concept of a layer is with regard to image manipulation.   Within Gimp, for beginners not used to this concept, you find yourself underestimating and underplaying what can be achieved with the various layers of a multi-layered image.   In simplistic terms each layer has the functionality in Gimp to be treated as a whole new image, and this is the best way to think of it when trying to achieve what you want to achieve with Gimp.<\/p>\n<p>Link to Gimp &#8220;spiritual home&#8221; &#8230; <a target=\"_blank\" href='http:\/\/www.gimp.org' title='Gimp' rel=\"noopener\">here<\/a>.<br \/>\nLink to Gimp forum &#8230; <a target=\"_blank\" href='http:\/\/gimpforums.com\/' title='Google Geo Charts' rel=\"noopener\">here<\/a>.<\/p>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d5366' onclick='var dv=document.getElementById(\"d5366\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"http:\/\/www.rjmprogramming.com.au\/wordpress\/?cat=4\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d5366' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr \/>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d9389' onclick='var dv=document.getElementById(\"d9389\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"http:\/\/www.rjmprogramming.com.au\/wordpress\/?tag=GIMP\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d9389' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr \/>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d10953' onclick='var dv=document.getElementById(\"d10953\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"http:\/\/www.rjmprogramming.com.au\/wordpress\/?tag=photography\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d10953' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d53722' onclick='var dv=document.getElementById(\"d53722\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/vignette\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d53722' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d53746' onclick='var dv=document.getElementById(\"d53746\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/interface\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d53746' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d53751' onclick='var dv=document.getElementById(\"d53751\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/gd\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d53751' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d53756' onclick='var dv=document.getElementById(\"d53756\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/scale\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d53756' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d53762' onclick='var dv=document.getElementById(\"d53762\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/rotation\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d53762' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d53766' onclick='var dv=document.getElementById(\"d53766\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/hardcoding\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d53766' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d53786' onclick='var dv=document.getElementById(\"d53786\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/pdf\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d53786' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d53794' onclick='var dv=document.getElementById(\"d53794\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/sms\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d53794' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d53800' onclick='var dv=document.getElementById(\"d53800\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/order\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d53800' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d53808' onclick='var dv=document.getElementById(\"d53808\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/emoji\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d53808' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d53816' onclick='var dv=document.getElementById(\"d53816\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/video\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d53816' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d53832' onclick='var dv=document.getElementById(\"d53832\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/command-line\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d53832' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d53858' onclick='var dv=document.getElementById(\"d53858\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/intranet\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d53858' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d55160' onclick='var dv=document.getElementById(\"d55160\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/intranet\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d55160' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d55184' onclick='var dv=document.getElementById(\"d55184\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/left\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d55184' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d64288' onclick='var dv=document.getElementById(\"d64288\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/media\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d64288' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d64353' onclick='var dv=document.getElementById(\"d64353\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/video\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d64353' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d64300' onclick='var dv=document.getElementById(\"d64300\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/colour-balance\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d64300' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Today&#8217;s work (all on our macOS MAMP local Apache\/PHP\/MySQL web server environment) is only &#8220;toe dipping&#8221; in a &#8220;great big sea of possibilities&#8221; regarding the great ffmpeg&#8216;s &#8220;filtering style abilities&#8221; further to yesterday&#8217;s Ffmpeg Video Subliminal Message Tutorial, but &#8230; &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/ffmpeg-video-overall-effects-tutorial\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,12,16,30,37],"tags":[4848,183,225,233,234,1662,415,418,491,631,3810,2178,744,1817,896,1738,1012,1149,4849,4850,1319,4851,1369],"class_list":["post-64300","post","type-post","status-publish","format-standard","hentry","category-animation","category-elearning","category-gimp","category-photography","category-tutorials","tag-brush-turkey","tag-camera","tag-colour-balance","tag-command","tag-command-line","tag-fade","tag-ffmpeg","tag-file","tag-gimp","tag-iphone","tag-macbook-air","tag-macos","tag-mamp","tag-message","tag-paintbrush","tag-photo","tag-python","tag-slide","tag-subliminal","tag-subliminal-message","tag-tutorial","tag-underexposed","tag-video"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/64300"}],"collection":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/comments?post=64300"}],"version-history":[{"count":6,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/64300\/revisions"}],"predecessor-version":[{"id":64357,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/64300\/revisions\/64357"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=64300"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=64300"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=64300"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}