Skip to content

Commit

Permalink
add lossy test
Browse files Browse the repository at this point in the history
  • Loading branch information
emmanuelroecker committed Sep 14, 2016
1 parent 8b07a44 commit 42b368c
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 31 deletions.
31 changes: 10 additions & 21 deletions src/GlLazyLoadImg.php
Original file line number Diff line number Diff line change
Expand Up @@ -78,35 +78,24 @@ private function gcd($a,$b) {
* minimal size is jpeg
*
* @param $src resource GD library
* @param int $quality jpeg quality from 0 (poor quality) to 100 (best quality) - default 0
* @param bool $minsize rescale to min size (default true)
* @return string
* @param int $minwidth min width in pixels (height autocalculte)
*
* @return string data uri format
*/
public function getLossyDataURI($src, $quality = 0, $minsize = true)
{
if ($minsize) {
$width = imagesx($src);
$height = imagesy($src);

$gcd = $this->gcd($width, $height);
$width = $width / $gcd;
$height = $height / $gcd;

$src = imagescale($src,$width,$height,IMG_NEAREST_NEIGHBOUR);
}
public function getLossyDataURI($src, $minwidth = 75)
{
$src = imagescale($src,$minwidth,-1,IMG_NEAREST_NEIGHBOUR);

ob_start();
imagejpeg($src, null, $quality);
imagegif($src);
$data = ob_get_contents();
ob_end_clean();

if ($minsize) {
imagedestroy($src);
}
imagedestroy($src);

$base64 = base64_encode($data);

$mime = 'image/jpeg';
$mime = 'image/gif';

return ('data:' . $mime . ';base64,' . $base64);
}
Expand All @@ -121,7 +110,7 @@ public function getLossyDataURI($src, $quality = 0, $minsize = true)
* @param int $blue blue component background color (default 255)
* @param bool $minsize rescale to min size (default true)
*
* @return string
* @return string data uri format
*/
public function getBlankDataURI($src, $red = 255, $green = 255, $blue = 255, $minsize = true)
{
Expand Down
14 changes: 7 additions & 7 deletions tests/GlLazyLoadImgTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@ public function testBlankDataURI()
$this->assertEquals($expected, $datauri);
}

/*

public function testLossyDataURI()
{
$lazyload = new GlLazyLoadImg(__DIR__);
$lazyload = new GlLazyLoadImg(__DIR__,GlLazyLoadImg::LOSSY);

$expected = file_get_contents(__DIR__ . '/expected/lossydatauri.data');

Expand All @@ -51,7 +51,7 @@ public function testLossyDataURI()

$this->assertEquals($expected, $datauri);
}
*/


public function testAutoDataURIBlank()
{
Expand All @@ -69,14 +69,14 @@ public function testAutoDataURIBlank()
$this->assertFileEquals($fileexpected, $fileresult);
}

/*

public function testAutoDataURILossy()
{
$html = '<!DOCTYPE html><html><head></head><body><div><img src="img/test1.jpg"></div></body></html>';

$lazyload = new GlLazyLoadImg(__DIR__);
$lazyload = new GlLazyLoadImg(__DIR__,GlLazyLoadImg::LOSSY);

$result = $lazyload->autoDataURI($html, GlLazyLoadImg::LOSSY);
$result = $lazyload->autoDataURI($html);

$fileresult = __DIR__ . '/result/autodataurilossy.html';
$fileexpected = __DIR__ . '/expected/autodataurilossy.html';
Expand All @@ -86,7 +86,7 @@ public function testAutoDataURILossy()

$this->assertFileEquals($fileexpected, $fileresult);
}
*/


public function testAutoWidthHeight()
{
Expand Down
2 changes: 1 addition & 1 deletion tests/expected/autodataurilossy.html
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
<!DOCTYPE html>
<html><head></head><body><div><img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gA6Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2ODApLCBxdWFsaXR5ID0gMAr/2wBDAP//////////////////////////////////////////////////////////////////////////////////////2wBDAf//////////////////////////////////////////////////////////////////////////////////////wAARCAEAAQADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwCSiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApCQOtLTWGRgetABvX1/Q/4Ub19f0P8AhTNh9v1/wo2H2/X/AAoAfvX1/Q/4Ub19f0P+FREYOKUKSM8UASb19f0P+FG5fX9DTNh9v1/wpQhBB46/57UASU3evr+h/wAKU9D9D/KoBzxQBNvX1/Q/4Ub19f0P+FM2H2/X/CjYfb9f8KAH719f0P8AhShgehqPYfb9f8KcqkHJx0oAfRRUbt2H40AOLAd6TePf/P40wKTTvL9/0oAdvWlBB6Go9h9RQoIYZHr/ACNAEtN3r6/of8KU8gj2NR7D7fr/AIUAP3r6/of8KN6+v6H/AApmw+36/wCFIVI696AJN6+v6H/Cjevr+h/wqMKT07Uuw+36/wCFAD96+v6H/CnVFsPt+v8AhUg4AHsKAFooooAKKKKACiiigAooooAhf7x/D+QqRPuj8f5mo3+8fw/kKkT7o/H+ZoAdRRRQAh6H6H+VQjqPqP51Meh+h/lUI6j6igCeikyPUfmKMj1H5igBaKTI9R+YoyD0OaAFqvVioGGCaAJhwKWow/Y/nT9wPcUALRRRQAUUUUAFRydvx/pUlRydvx/pQAR9/wAP61JUcff8P61JQAUUUUAFFFFABRRRQAUUUUAFFFFAEL/eP4fyFSJ90fj/ADNRv94/h/IVIn3R+P8AM0AOooooAQ9D9D/KoKnPQ/Q/yqEdR9R/OgBdjen6ijY3p+oqaigCHY3p+op6AjOfb+tPooAKQgHrS0UARFD25puCOxqeigCAEjoakV88H86cVB/xqEjBxQBPRSA5ANLQAVHJ2/H+lSVHJ2/H+lABH3/D+tSVHH3/AA/rUlABRRRQAUUUUAFFFFABRRRQAUUUUAQv94/h/IVIn3R+P8zUb/eP4fyFSJ90fj/M0AOooooAQ9D9D/KoR1H1H86mPQ/Q/wAqgHHNAFiiot59v1/xo3n2/X/GgCWiot59v1/xpVYkgcUASUUVACR7UAT0VFvPoKXzPb9f/rUASVAxyTSlifahVz9KAJF+6KdRRQAVHJ2/H+lSVHJ2/H+lABH3/D+tSVHH3/D+tSUAFFFFABRRRQAUUUUAFFFFABRRRQA0qDyR/OlAxwKWigAooooAKbsX0/U/406igBuxfT9T/jRsX0/U/wCNOooAbsX0/U/40BQOQP506igApCAeopaKAG7FpNg9/wDP4U+igBoVR2/OnUUUAFFFFABSEA9aWigBAAOlLRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/2Q==" data-original="img/test1.jpg"></div></body></html>
<html><head></head><body><div><img src="data:image/gif;base64,R0lGODdhSwBLAMQAAAQCBIyKjNTS1Dw6POzq7BwaHKyqrPT29BQSFFxeXAwKDLy6vPz+/AQGBJyenNza3ExKTPTy9CwuLPz6/GxqbMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAASwBLAAAF/iAjjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHEycZVr5zL5tWY1APC4XC6a28+jxRveGETUdoFweCuCgXWGACUACoIME4lzBy6TJHEoAA0tcQQMBwcTFHCYozqXJ6UqAqkupzmui4orEqybtTawlrIqBbeFvjS5I8CPIgGZxa3EMsJ1mixyEJ3QyzHNDJGxcxUq1zPX2SUJgYS6uzjg5zAIl+XY1TDpM2UOcAKo8C/yNXAF+Oq4gOVLAQfBvx37Vrh79MbAQVPA3izU9dCEN2YC9xxCFEdjJgWkAPLLtDASnlV2Lp6F3DGRRbk1LU/E1DEThxoxOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdMdIQAAOw==" width="256" height="256" data-original="img/test1.jpg"></div></body></html>
2 changes: 1 addition & 1 deletion tests/expected/lossydatauri.data
Original file line number Diff line number Diff line change
@@ -1 +1 @@
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gA8Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2ODApLCBxdWFsaXR5ID0gMTAwCv/bAEMAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/bAEMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAQABAAMBEQACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AP7+KACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA+Nf20f28v2T/+Cd/ws0D41fth/Fdvg/8ADPxP8QNJ+GGieJP+EF+Ivj43/jvWNA8W+L9M0QaP8MvCHjXxBbC90DwR4rv/AO077S00hP7IMDanHqmoabHqAB+ZP/EUZ/wQp/6Pn/8ANZv2xf8A6H+gA/4ijP8AghT/ANHz/wDms37Yv/0P9AB/xFGf8EKf+j5//NZv2xf/AKH+gA/4ijP+CFP/AEfP/wCazfti/wD0P9AB/wARRn/BCn/o+f8A81m/bF/+h/oA7z4Uf8HGf/BGf44fFP4a/Bb4X/tj/wDCUfE34vfEHwh8L/h14ZP7Pf7U2if8JD478f6/Y+EfCegrq/iX4HaZoOjDVNe1aysRqWv6rpmkaYbgTatqen6WskqgH67/ABX+KPgL4HfC34k/Gz4o663hn4Z/CD4f+Mfil8RfEh0rVdcHhvwN4E0C/wDF3i7XhpHhvTdV8Qav/ZWhaVfah/Zugabqer6k1oINJ0zUdTdI3APxM/4ijP8AghT/ANHz/wDms37Yv/0P9AB/xFGf8EKf+j5//NZv2xf/AKH+gA/4ijP+CFP/AEfP/wCazfti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aXNHLa6n+0H428UfE7Siwx/x+fD+7vdM+FusKMZC6p4G1HDcDByKAP3c8N+HPD3g/Q9K8KeEdA0fwr4Z0CyttM0Hw54d0u00XQ9I061Xbaafpek6da2Gn2NjZIpEdlYRoiINm0D5WAOloAKACgD8+/25v+CXf7Cn/BSf/hV//Da3wN/4XT/wpg+N/wDhWi/8LM+MPw7/AOEb/wCFinwiPGZ/4tN8Q/A51n+1T4H8LBv7f/tQaadJH9k/2cL7UTfAB+wz/wAEu/2FP+CbH/C0P+GKfgb/AMKW/wCFznwR/wALLX/hZnxh+In/AAkn/Cuj4uHgw/8AF2fiH44Ojf2UfHHikL/YH9ljUjqx/tb+0RY6cbEA/QSgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAP/9k=
data:image/gif;base64,R0lGODdhZABkAMQAAAQCBISChFRWVMTCxCQiJOTi5PTy9BQWFJyenDQyNGxubPz6/AwKDOzu7BweHLSytDw6PHR2dAQGBIyOjNTW1CwqLOTm5PT29BwaHDQ2NHRydPz+/LS2tAAAAAAAAAAAACwAAAAAZABkAAAF/uAmjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/45GJh4i/5DACCg4SFABIMInyGjAAoCwwShBIHERt+G42ag3sxC5uaJIegjiYJpIqkjTSSqoSio5sln6QSI66GMpgmoxe7vIIpCxeXt4MNfrsHpSmtxH3POYMs0y+jCr8w1UPbKd3UgtEz30DkwMwt0+Ix5j7tsOjgpb/ZKO889yKCttaHE50j6tkLRiRfJoIuBkkKQMOgNITeVJWgwEhAA20QgxhsBarPpgzpMpYTeQ5UvQUPrggYkjRhhUMcBvfZWFAgQi4VL2/EJCmDmIJBEHDy7LEzXo1hGqYJzGmjaA5MrQQeNPrDKb6hU4tYfSFVH1amNbbmGHAPbEOsXqmSAJjpwAk+KgVxEKqWKNqDHEMZm8T3kMu7D+vuRTVYkwN5RGgJXuTqFwICeQUhWDdQ8A62NzArCpinj4quazuLHk26tOnTqFOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwJOEAAA7

0 comments on commit 42b368c

Please sign in to comment.