Skip to content

Instantly share code, notes, and snippets.

@chezsick
Last active August 1, 2019 18:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chezsick/b4a449000a12e069c12a3b19845b61e6 to your computer and use it in GitHub Desktop.
Save chezsick/b4a449000a12e069c12a3b19845b61e6 to your computer and use it in GitHub Desktop.
Reproduce The Secam Process In My "Sauce" ;;;;;; arg1 ::::: length width image + PAL (Bonus)
<?php
$b = 0;
$m = 0;
$final = array_fill(0,3,0);
function yuv2rgb($color)
{
$rgb = array_fill(0,3,0);
$rgb[0] = abs($color[0] + 1.4075 * ($color[2] - 128));
$rgb[1] = abs($color[0] - 0.3455 * ($color[1] - 128) - (0.7169 * ($color[2] - 128)));
$rgb[2] = abs($color[0] + 1.7790 * ($color[1] - 128));
return $rgb;
}
while (false !== ($o = fgetc(STDIN)))
{
switch ($m % 2)
{
case 0:
$a = ord($o);
break;
case 1:
$b = ord($o);
break;
}
$y = intval(($a+$b)/2);
$final = yuv2rgb([$y,$a-$y,$b-$y]);
if ($final[0] > 256){$final[0]=255-$final[0];}
if ($final[1] > 256){$final[1]=255-$final[1];}
if ($final[2] > 256){$final[2]=255-$final[2];}
echo chr($final[0]).chr($final[1]).chr($final[2]);
$m = $m + 1;
}
<?php
$m = 0;
$final = array_fill(0,3,0);
function rgb2yuv($color)
{
$yuv = array_fill(0,3,0);
$yuv[0] = $color[0] * .299000 + $color[1] * .587000 + $color[2] * .114000;
$yuv[1] = $color[0] * -.168736 + $color[1] * -.331264 + $color[2] * .500000 + 128;
$yuv[2] = $color[0] * .500000 + $color[1] * -.418688 + $color[2] * -.081312 + 128;
return $yuv;
}
while ($o = fread(STDIN,3))
{
$final = rgb2yuv([ord($o[0]),ord($o[1]),ord($o[2])]);
switch ($m % 2)
{
case 0:
$p = intval(($final[0] + ($final[1] - $final[2]))/2);
break;
case 1:
$p = intval(($final[0] + ($final[2] - $final[1]))/2);
break;
}
echo chr($p);
$m = $m + 1;
}
<?php
$m = 0;
$line = $argv[1];
$final = array_fill(0,3,0);
function rgb2yuv($color)
{
$yuv = array_fill(0,3,0);
$yuv[0] = $color[0] * .299000 + $color[1] * .587000 + $color[2] * .114000;
$yuv[1] = $color[0] * -.168736 + $color[1] * -.331264 + $color[2] * .500000 + 128;
$yuv[2] = $color[0] * .500000 + $color[1] * -.418688 + $color[2] * -.081312 + 128;
return $yuv;
}
while ($o = fread(STDIN,3))
{
$final = rgb2yuv([ord($o[0]),ord($o[1]),ord($o[2])]);
$y = ($final[0] / 256)*128;
switch (intval($m/$line) % 2)
{
case 0:
$p = $m % 2 ? (($final[1]/256)*128) + $y : $y;
break;
case 1:
$p = $m % 2 ? (($final[2]/256)*128) + $y : $y;
break;
}
echo chr($p);
$m = $m + 1;
}
<?php
$m = 0;
$l = 0;
$v = 0;
$u = true;
$one = 0;
$two = 0;
$line = $argv[1];
$yc = array_fill(0,$line,0);
$uc = array_fill(0,$line,0);
$vc = array_fill(0,$line,0);
$b = array_fill(0,$line,0);
$final = array_fill(0,3,0);
function yuv2rgb($color)
{
$rgb = array_fill(0,3,0);
$rgb[0] = abs($color[0] + 1.4075 * ($color[2] - 128));
$rgb[1] = abs($color[0] - 0.3455 * ($color[1] - 128) - (0.7169 * ($color[2] - 128)));
$rgb[2] = abs($color[0] + 1.7790 * ($color[1] - 128));
return $rgb;
}
while ($u)
{
for ($r = 0;$r < $line;$r++){$b[$r] = fgetc(STDIN);}
for ($n = 0;$n < $line;$n++)
{
switch ($m % 2)
{
case 0:
$one = ord($b[$n]);
break;
case 1:
$two = ord($b[$n]);
break;
}
$subcarr = $two - $one;
$carrier = $m % 2 ? ord($b[$n]) - $subcarr : ord($b[$n]);
switch ($l % 2)
{
case 0:
$u = 256*($subcarr/128);
$uc[$n] = $u;
break;
case 1:
$v = 256*($subcarr/128);
$vc[$n] = $v;
break;
}
$y = 256*($carrier/128);
$yc[$n] = $y;
$m = $m + 1;
}
for ($x = 0;$x < $line;$x++)
{
$final = yuv2rgb([$yc[$x],$uc[$x],$vc[$x]]);
if ($final[0] > 256){$final[0]=255-$final[0];}
if ($final[1] > 256){$final[1]=255-$final[1];}
if ($final[2] > 256){$final[2]=255-$final[2];}
echo chr($final[0]).chr($final[1]).chr($final[2]);
}
$l = $l + 1;
if (feof(STDIN)){$u = false;}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment