Вход Регистрация
Файл: concrete5.7.5.6/concrete/js/build/vendor/jquery-fileupload/load-image-ios.js
Строк: 138
<?php
/*
 * JavaScript Load Image iOS scaling fixes 1.0.3
 * https://github.com/blueimp/JavaScript-Load-Image
 *
 * Copyright 2013, Sebastian Tschan
 * https://blueimp.net
 *
 * iOS image scaling fixes based on
 * https://github.com/stomita/ios-imagefile-megapixel
 *
 * Licensed under the MIT license:
 * http://www.opensource.org/licenses/MIT
 */

/*jslint nomen: true, bitwise: true */
/*global define, window, document */

(function (factory) {
    
'use strict';
    if (
typeof define === 'function' && define.amd) {
        
// Register as an anonymous AMD module:
        
define(['load-image'], factory);
    } else {
        
// Browser globals:
        
factory(window.loadImage);
    }
}(function (
loadImage) {
    
'use strict';

    
// Only apply fixes on the iOS platform:
    
if (!window.navigator || !window.navigator.platform ||
             !(/
iP(hone|od|ad)/).test(window.navigator.platform)) {
        return;
    }

    var 
originalRenderMethod loadImage.renderImageToCanvas;

    
// Detects subsampling in JPEG images:
    
loadImage.detectSubsampling = function (img) {
        var 
canvas,
            
context;
        if (
img.width img.height 1024 1024) { // only consider mexapixel images
            
canvas document.createElement('canvas');
            
canvas.width canvas.height 1;
            
context canvas.getContext('2d');
            
context.drawImage(img, -img.width 10);
            
// subsampled image becomes half smaller in rendering size.
            // check alpha channel value to confirm image is covering edge pixel or not.
            // if alpha value is 0 image is not covering, hence subsampled.
            
return context.getImageData(0011).data[3] === 0;
        }
        return 
false;
    };

    
// Detects vertical squash in JPEG images:
    
loadImage.detectVerticalSquash = function (imgsubsampled) {
        var 
naturalHeight img.naturalHeight || img.height,
            
canvas document.createElement('canvas'),
            
context canvas.getContext('2d'),
            
data,
            
sy,
            
ey,
            
py,
            
alpha;
        if (
subsampled) {
            
naturalHeight /= 2;
        }
        
canvas.width 1;
        
canvas.height naturalHeight;
        
context.drawImage(img00);
        
data context.getImageData(001naturalHeight).data;
        
// search image edge pixel position in case it is squashed vertically:
        
sy 0;
        
ey naturalHeight;
        
py naturalHeight;
        while (
py sy) {
            
alpha data[(py 1) * 3];
            if (
alpha === 0) {
                
ey py;
            } else {
                
sy py;
            }
            
py = (ey sy) >> 1;
        }
        return (
py naturalHeight) || 1;
    };

    
// Renders image to canvas while working around iOS image scaling bugs:
    // https://github.com/blueimp/JavaScript-Load-Image/issues/13
    
loadImage.renderImageToCanvas = function (
        
canvas,
        
img,
        
sourceX,
        
sourceY,
        
sourceWidth,
        
sourceHeight,
        
destX,
        
destY,
        
destWidth,
        
destHeight
    
) {
        if (
img._type === 'image/jpeg') {
            var 
context canvas.getContext('2d'),
                
tmpCanvas document.createElement('canvas'),
                
tileSize 1024,
                
tmpContext tmpCanvas.getContext('2d'),
                
subsampled,
                
vertSquashRatio,
                
tileX,
                
tileY;
            
tmpCanvas.width tileSize;
            
tmpCanvas.height tileSize;
            
context.save();
            
subsampled loadImage.detectSubsampling(img);
            if (
subsampled) {
                
sourceX /= 2;
                
sourceY /= 2;
                
sourceWidth /= 2;
                
sourceHeight /= 2;
            }
            
vertSquashRatio loadImage.detectVerticalSquash(imgsubsampled);
            if (
subsampled || vertSquashRatio !== 1) {
                
sourceY *= vertSquashRatio;
                
destWidth Math.ceil(tileSize destWidth sourceWidth);
                
destHeight Math.ceil(
                    
tileSize destHeight sourceHeight vertSquashRatio
                
);
                
destY 0;
                
tileY 0;
                while (
tileY sourceHeight) {
                    
destX 0;
                    
tileX 0;
                    while (
tileX sourceWidth) {
                        
tmpContext.clearRect(00tileSizetileSize);
                        
tmpContext.drawImage(
                            
img,
                            
sourceX,
                            
sourceY,
                            
sourceWidth,
                            
sourceHeight,
                            -
tileX,
                            -
tileY,
                            
sourceWidth,
                            
sourceHeight
                        
);
                        
context.drawImage(
                            
tmpCanvas,
                            
0,
                            
0,
                            
tileSize,
                            
tileSize,
                            
destX,
                            
destY,
                            
destWidth,
                            
destHeight
                        
);
                        
tileX += tileSize;
                        
destX += destWidth;
                    }
                    
tileY += tileSize;
                    
destY += destHeight;
                }
                
context.restore();
                return 
canvas;
            }
        }
        return 
originalRenderMethod(
            
canvas,
            
img,
            
sourceX,
            
sourceY,
            
sourceWidth,
            
sourceHeight,
            
destX,
            
destY,
            
destWidth,
            
destHeight
        
);
    };

}));
?>
Онлайн: 3
Реклама