All streams
Search
Write a publication
Pull to refresh
11
0
Алексей Стукарчук @studentpm

User

Send message
Согласен. Но! Если хочешь найти что-то возле дома — укажи где твой дом! =)
Околодомных запросов меньше чем общих.
Да, магазинчик удобный =)
Но есть пара дырок в безопасности… но думаю автор подлатает их скоро.
И Вас с праздничком! %)
При 3*3 можно просто искать совпадения.
В посте реализовано 20*20… тут точность выше но работать с результатом сложнее.
Еще можно попробовать псевдосемантикой. Т.е. разбить ключ на элементы и сравнивать и искать с наибольшим процентов вхождения.
Был как-то на хабре пост про организацию поиска аля яндекс. Там описано как сделать можно.
Думаю мускуль тут слабый помощник =\
Хотя если через лайк запрос выбрать поля хотя бы с 50% содержанием элементов ключа, а дальше уже средствами того же php уточнить результат… но это ни разу не оптимально =((
Не меняется… проверял. Но все равно сменил на функцию array_intersect().
Если есть в образе то обновятся. Старые, к сожалению не покатят.
А вообще лучше иметь доступ к инету.
Написал класс из всего этого:

<?php

    // ini_set('memory_limit', '256M');
    
    class imagediff
    {
        private $image1;
        private $image2;
        
        function  __construct($img1, $img2)
        {
            $this->image1['path'] = realpath($img1);
            $this->image2['path'] = realpath($img2);
            if($this->image1['path'] === false || $this->image2['path'] === false)
            {
                throw new Exception('Image "'.htmlspecialchars( $this->image1 ? $img2 : $img1 ).'" not found!');
            }
            else
            {
                $this->image1['type'] = $this->imagetyte($this->image1['path']);
                $this->image2['type'] = $this->imagetyte($this->image2['path']);
            }
        }

        private function imagetyte($imgname)
        {
            $file_info = pathinfo($imgname);
            if(!empty ($file_info['extension']))
            {
                $filetype = strtolower($file_info['extension']);
                $filetype = $filetype == 'jpg' ? 'jpeg' : $filetype;
                $func = 'imagecreatefrom' . $filetype;
                if(function_exists($func))
                {
                    return $filetype;
                }
                else
                {
                    throw new Exception('File type "'.htmlspecialchars( $filetype ).'" not supported!');
                }
            }
            else
            {
                throw new Exception('File type not supported!');
            }
        }

        private function imagehex($image)
        {
            $size = getimagesize($image['path']);
            $func = 'imagecreatefrom'.$image['type'];
            $imageres = $func($image['path']);
            $zone = imagecreate(20, 20);
            imagecopyresized($zone, $imageres, 0, 0, 0, 0, 20, 20, $size[0], $size[1]);
            $colormap = array();
            $average = 0;
            $result = array();
            for($x=0; $x<20; $x++)
            {
                for($y=0; $y<20; $y++)
                {
                    $color = imagecolorat($zone, $x, $y);
                    $color = imagecolorsforindex($zone, $color);
                    $colormap[$x][$y]= 0.212671 * $color['red'] + 0.715160 * $color['green'] + 0.072169 * $color['blue'];
                    $average += $colormap[$x][$y];
                }
            }
            $average /= 400;
            for($x=0; $x<20; $x++)
            {
                for($y=0; $y<20; $y++)
                {
                    $result[]=($x<10?$x:chr($x+97)) . ($y<10?$y:chr($y+97)) . round(2*$colormap[$x][$y]/$average);
                }
            }
            return $result;
        }

        public function diff()
        {
            $hex1 = $this->imagehex($this->image1);
            $hex2 = $this->imagehex($this->image2);
            $result = 0;
            foreach($hex1 as $bit)
            {
                if(in_array($bit, $hex2))
                {
                    $result++;
                }
            }
            return $result / ( ( count($hex1) + count($hex2) ) / 2 );
        }
    }

    $diff = new imagediff('/opt/www/test/www/3.png', '/opt/www/test/www/3.jpeg');
    print ($diff->diff() * 100 ).'%';

?>

webiteam.ru/wp-content/uploads/2009/03/ubuntu904-new.png
Хабр съел тег =(
Все появилось:
Для того кто хоть раз так делал этого хватит. А кто решит обновиться впервые, думаю будет интересно.
В оригинале статьи
www.belta.by/ru/main_news_other/?id=334501
есть такая пометка:
16 февраля, Минск /Корр. БЕЛТА/.
Так что эта статья косяк корреспондента а не производителя…
А что за ноут будет еще посмотреть нужно.
Ну если на прямую то вот:
<?=(empty($_GET['category'])? 'выберите категорию': strtoupper(htmlspecialchars($_GET['category'])));?>

А при грамотном MVC это будет так:
<?=$view->get('category', 'выберите категорию')?>

зы: пример странный, через get передавать русский текст…
зы2: strtoupper вообще говоря лишняя функция, это проще и лучше делать через css
Вот хоть убей, но обработкой должен заниматься контроллер а не представление.
Опять же имхо.
А чем <?=$myVar;?> отличается по читабельности {$myVar}… скобочками?

Information

Rating
Does not participate
Location
Санкт-Петербург и область, Россия
Date of birth
Registered
Activity