1. PHP / Говнокод #4276

    +155

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    $image = imageCreateFromJpeg("test666.jpg");
    
    $width = imageSX($image);
    $height = imageSY($image);
    
    $colorsR = array();
    $colorsG = array();
    $colorsB = array();
    
    for ($i = 0; $i < $width; $i++) {
    	for ($j = 0; $j < $height; $j++) {
    		
    		$color = imageColorAt($image, $i, $j);
    		list($r, $g, $b) = array_values(imageColorsForIndex($image, $color));
    		
    		if ($r != "255" && $g != "255" && $b != "255") {
    			array_push($colorsR, $r);
    			array_push($colorsG, $g);
    			array_push($colorsB, $b);
    		}
    		
    	}
    }
    
    $middleR = base_convert(round(array_sum($colorsR) / count($colorsR)), 10, 16);
    $middleG = base_convert(round(array_sum($colorsG) / count($colorsG)), 10, 16);
    $middleB = base_convert(round(array_sum($colorsB) / count($colorsB)), 10, 16);
    
    
    echo "<h1>".$middleR.$middleG.$middleB."</h1>"

    Только что "родил": нахождение среднего цвета на картинке для собственных нужд. Поскольку пхп я особо не знал никогда, делал "влом".
    Претендует ли это на звание говнокода?

    Запостил: Cr@ZyBoY, 17 Сентября 2010

    Комментарии (15) RSS

    • Литьен: господа, кто-нибудь пдф в жпег конвертировал через php?
      Мекор: мсье знает толк в извращениях
      Литьен: не без этого

      © Bash.org.ru
      Ответить
    • Ну ничего особенного сверхговнокодистого не видно.
      Ответить
    • Нормально.
      Если пишете для других - пишите комментарии, даже если код довольно понятен, как здесь.
      Любите одинарные кавычки, двойные - моветон.
      Конкатенацию принято оформлять с пробелами: $var . $var2
      > if ($r != "255" && $g != "255" && $b != "255") {
      И я не совсем понял - почему вы не любите белый цвет?
      И почему вы сравниваете значение цвета со строкой? Корректно if ($r != 255 и т.д.

      Вообще, код выдает в вас паскалиста. Я угадал?
      Ответить
      • Код писал исключительно для себя - стравить ему несколько картинок, узнать цвет, и убрать скрипт в долгий ящик.

        С оформлением я особо не заморачивался, опять же, потому что только для себя.

        Белый цвет отсеивал, потому что изображения на белом фоне - зачем мне лишний цвет?

        На паскале последний раз программировал 3 года назад, а так я больше по JavaScript...
        Ответить
        • Здесь то и говнокод, это не проверка на белый.
          надо так:
          (!($r == "255" && $g == "255" && $b == "255"))
          или так:
          ($r != "255" || $g != "255" || $b != "255")
          Ответить
          • А вообще я тож тупанул, на белый надо проверять сразу $color.
            Ответить
          • Вообще-то ваш первый вариант - то же самое, что и у меня, только с общим отрицанием и на 3 знака больше. Второй - вообще не правильно: "ИЛИ" будут отсеивать также и красный, синий, зеленый, розовый и т.д.
            Ответить
            • вы неправы
              http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD%D1%8B_%D0 %B4%D0%B5_%D0%9C%D0%BE%D1%80%D0%B3%D0%B0 %D0%BD%D0%B0
              Ответить
              • Какая к чёрту алгебра логики в пятницу вечером?!
                Ответить
                • Какое значение имеет индекс дня в произвольно выбранной системе отсчёта, куд-кудах?
                  Ответить
            • Может я слепой конечно, сейчас попробую ваш кусок кода по словам прочитать:

              если красный не равен 255
              И зелёный не равен 255
              И красный не равен 255
              то распихаем их по своим массивам

              0xFF0000 (это не белый если что) - проверку НЕ проходит и по массивам не распихивается
              Ответить
    • Ад, пиздец и содомия. Базовые алгоритмы нужно знать.

      Нафига срать в память массивами? Нахождение среднего для i+1 чисел если известно число n и среднее для предыдущих i чисел выражается индукционной формулой mid[1] = n, mid[i+1] = (mid[i]*i+n)/(i+1), где mid -это не массив, а просто обозначение для индукционного соотношения.

      Итого, имеем.
      mid[1] = n[1]
      mid[2] = (n[1]*1+n[2])/2 = (n[1]+n[2])/2
      mid[3] = (mid[2]*2+n[3])/3 = ((n[1]+n[2])/2*2+n[3])/3 = (n[1]+n[2]+n[3])/3
      И так далее по тому же принципу.
      Ответить
      • как я с вами согласен!
        но только делать это придется в два прохода. сначала считаем белые пиксели, потом вычитаем их количество из тотала, а потом быстренько по вавшему алгоритму обходим всю картинку еще раз, деля цвет компонента на небелый тотал.
        прямо чувствую как скорость выполнения возрастает в разы на коллекции из полутысячи двенадцатимегапиксельных фоток.
        Ответить
        • Вообще-то, если вам нужно не учитывать белые пискели, то всего-навсего при проходке их пропускаете, не инкреминтируя счетчик количества подсчитанных значений.

          Зачем вторая проходка?

          Ах, да, вы же быдлокодер... тогда да, нужна вторая. И по проходке для каждого компонента отдельно.
          Ответить

    Добавить комментарий