Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Определение прозрачности (https://javascript.ru/forum/misc/59720-opredelenie-prozrachnosti.html)

Malleys 23.11.2015 21:11

Ну а если не каждый пиксел изображения проверять, то как узнать, что есть полупрозрачневый пиксел?

рони 23.11.2015 21:14

:)
работать из-за безопасности конечно не будет (почти), но как вариант
<!doctype html>
<html>
<meta charset='utf-8'>

<head>
    <title></title>
</head>

<body>
    <script>
        function fn(url, callback) {
            var canvas = document.createElement('canvas'),
                context = canvas.getContext('2d'),
                pic = new Image();
            pic.crossOrigin = "Anonymous";
            pic.onload = function() {
                canvas.width = pic.width;
                canvas.height = pic.height;
                context.drawImage(pic, 0, 0);
                var imageData = context.getImageData(0, 0, pic.width, pic.height);
                var pix = imageData.data;
                var transparent = false;
                for (var i = 0, n = pix.length; i < n; i += 4) {
                    if (pix[i + 3] == 0) {
                        transparent = true;
                        break
                    }
                }


                callback(transparent)

            };

            pic.src = url
        }
        var url = 'http://5.firepic.org/5/images/2015-11/23/zmda01sjsdpe.png',
            callback = function(a) {
                alert(a)
            };
        fn(url, callback)
    </script>
</body>

</html>

laimas 23.11.2015 21:31

Цитата:

Сообщение от Malleys
Ну а если не каждый пиксел изображения проверять

Никак, о том и речь. Хорошо если область прозрачности в первых пикселях сразу, но если нет, то еще вопрос каковы размеры, да и единична ли такая проверка. Да и первый попавшийся прозрачный пиксель еще не может означать, что у изображения есть область прозрачности сознательно определенная, а если случайность? Если бы речь шла об изображениях на палитре было бы просто - считать палитру и выяснить индекс имеющий прозрачность, но нужен PNG24, да и canvas не работает с индексированной палитрой, хотя это можно и самому сделать.

Если это не единичный случай, то наверное выгоднее в контексте всей задачи это рассматривать - кто источник изображений, кто его готовит, можем ли знать о применении прозрачности у изображения уже на этапе сохранения его на сервере и хранить это как признак?


Часовой пояс GMT +3, время: 10:01.