PHP Classes

File: inc.cropinterface.php

Recommend this page to a friend!
  Classes of Andrew Collington   Crop Canvas   inc.cropinterface.php   Download  
File: inc.cropinterface.php
Role: Auxiliary script
Content type: text/plain
Description: The client-side code for the cropping interface.
Class: Crop Canvas
A class to crop images in a variety of ways.
Author: By
Last change: Updated the CSS and interface and moved some elements in to a different auxiliary file.
Date: 17 years ago
Size: 8,409 bytes
 

Contents

Class file image Download
<?php

/**
 * $Id: inc.cropinterface.php 49 2006-11-29 14:35:46Z Andrew $
 *
 * [Description]
 *
 * Required file for class.cropinterface.php.
 *
 * [Author]
 *
 * Andrew Collington <php@amnuts.com> <http://php.amnuts.com/>
 */

list($w, $h) = $this->calculateCropDimensions($this->crop['default']);
list(
$x, $y) = $this->calculateCropPosition($w, $h);

?>

<!--
    Styles for the interface.
    Don't change any of the php code segments or #theCrop, unless you know
    what you are doing. Feel free to change the rest if you so desire.
-->

<style type="text/css">
    #cropInterface {
        border: 1px solid black;
        padding: 0;
        margin: 0;
        text-align: center;
        background-color: #fff;
        color: #000;
        font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif;
        font-size: 10px;
        width: <?php echo $this->getImageWidth(); ?>px;
    }
    #cropDetails {
        margin: 5px;
        padding: 0;
    }
    #cropResize, #cropResize p {
        margin: 5px;
        padding: 0;
        font-size: 11px;
        display: <?php echo ($this->crop['change'] && $this->crop['resize']) ? 'inherit' : 'none'; ?>;
    }
    #cropSizes {
        margin: 5px;
        padding: 0;
        font-size: 11px;
        display: <?php echo (!empty($this->crop['sizes']) && $this->crop['resize']) ? 'inherit' : 'none'; ?>;
    }
    #cropImage {
        border-top: 1px solid black;
        border-bottom: 1px solid black;
        margin: 0;
        padding: 0;
    }
    #cropSubmitButton {
        font-size: 10px;
        font-family: "MS Sans Serif", Geneva, sans-serif;
        background-color: #D4D0C8;
        border: 0;
        margin: 0;
        padding: 5px;
        width: 100%;
    }
    #theCrop {
        position: absolute;
        background-color: transparent;
        border: 1px solid yellow;
        background-image: url(<?php echo $this->getImageSource(); ?>);
        background-repeat: no-repeat;
        padding: 0;
        margin: 0;
    }
    #cropImage, #theImage {
        width: <?php echo $this->getImageWidth(); ?>px;
        height: <?php echo $this->getImageHeight(); ?>px;
    }

    /* box model hack stuff */

    #theCrop {
        width: <?php echo $w; ?>px;
        font-family: "\"}\"";
        font-family:inherit;
        width:<?php echo ($w - 2); ?>px;
    }
    #theCrop {
        height: <?php echo $h; ?>px;
        font-family: "\"}\"";
        font-family:inherit;
        height:<?php echo ($h - 2); ?>px;
    }
    html>body #theCrop {
        width:<?php echo ($w - 2); ?>px;
        height:<?php echo ($h - 2); ?>px;
    }
</style>

<!--
    The main interface.
    You must not rename the ids because things may break!
-->

<div id="theCrop"></div>
<div id="cropInterface">
    <div id="cropDetails">
        <strong><?php echo basename($this->file); ?> (<?php echo $this->img['sizes'][0]; ?> x <?php echo $this->img['sizes'][1]; ?>)</strong>
        <div id="cropDimensions">&nbsp;</div>
    </div>
    <div id="cropImage"><img src="<?php echo $this->getImageSource(); ?>" alt="image" title="crop this image" name="theImage" id="theImage" /></div>
    <div id="cropResize">
        <p>Hold down 'shift' or 'control' while dragging to resize cropping area</p>
        <input type="radio" id="cropResizeAny" name="resize" onClick="cc_SetResizingType(0);"<?php if ($this->crop['type'] == ccRESIZEANY) { echo ' checked="checked"'; } ?> /> <label for="cropResizeAny">Any Dimensions</label> &nbsp; <input type="radio" name="resize" id="cropResizeProp" onClick="cc_SetResizingType(1);"<?php if ($this->crop['type'] == ccRESIZEPROP) { echo ' checked="checked"'; } ?> /> <label for="cropResizeProp">Proportional</label>
    </div>
    <div id="cropSizes">
        <select id="setSize" name="setSize" onchange="cc_setSize();">
            <option value="-1">Select a cropping size</option>
            <?php
               
if (!empty($this->crop['sizes'])) {
                    foreach (
$this->crop['sizes'] as $size => $desc) {
                        echo
'<option value="', $size, '">', $desc, '</option>';
                    }
                }
           
?>
</select>
    </div>
    <div id="cropSubmit">
        <input type="submit" value="crop the image" id="cropSubmitButton" onClick="cc_Submit();" />
    </div>
</div>

<!--
    Main javascript routines.
    Changing things here may break functionality, so don't tweak unless you
    know what you are doing.
-->

<script type="text/javascript" src="wz_dragdrop.js"></script>
<script type="text/javascript">
    function my_DragFunc()
    {
        dd.elements.theCrop.maxoffr = dd.elements.theImage.w - dd.elements.theCrop.w;
        dd.elements.theCrop.maxoffb = dd.elements.theImage.h - dd.elements.theCrop.h;
        dd.elements.theCrop.maxw = <?php echo $this->getImageWidth(); ?>;
        dd.elements.theCrop.maxh = <?php echo $this->getImageHeight(); ?>;
        cc_showCropSize();
        cc_reposBackground();
    }

    function my_ResizeFunc()
    {
        dd.elements.theCrop.maxw = (dd.elements.theImage.w + dd.elements.theImage.x) - dd.elements.theCrop.x;
        dd.elements.theCrop.maxh = (dd.elements.theImage.h + dd.elements.theImage.y) - dd.elements.theCrop.y;
        cc_showCropSize();
        cc_reposBackground();
    }

    function cc_Submit()
    {
        self.location.href = '<?php echo $_SERVER['PHP_SELF']; ?>?file=<?php echo $this->file; ?>&sx=' +
                Math.round((dd.elements.theCrop.x - dd.elements.theImage.x)<?php echo ($this->getRatio()) ? ' * ' . $this->getRatio() : ''; ?>) + '&sy=' +
                Math.round((dd.elements.theCrop.y - dd.elements.theImage.y)<?php echo ($this->getRatio()) ? ' * ' . $this->getRatio() : ''; ?>) + '&ex=' +
                Math.round(((dd.elements.theCrop.x - dd.elements.theImage.x) + dd.elements.theCrop.w)<?php echo ($this->getRatio()) ? ' * ' . $this->getRatio() : ''; ?>) + '&ey=' +
                Math.round(((dd.elements.theCrop.y - dd.elements.theImage.y) + dd.elements.theCrop.h)<?php echo ($this->getRatio()) ? ' * ' . $this->getRatio() : ''; ?>) +
                '<?php echo $this->params['str']; ?>';
    }

    function cc_SetResizingType(proportional)
    {
        if (proportional) {
            dd.elements.theCrop.defw = dd.elements.theCrop.w;
            dd.elements.theCrop.defh = dd.elements.theCrop.h;
            dd.elements.theCrop.scalable = 1;
            dd.elements.theCrop.resizable = 0;
        } else {
            dd.elements.theCrop.scalable = 0;
            dd.elements.theCrop.resizable = 1;
        }
    }

    function cc_reposBackground()
    {
        xPos = (dd.elements.theCrop.x - dd.elements.theImage.x + 1);
        yPos = (dd.elements.theCrop.y - dd.elements.theImage.y + 1);

        if (document.getElementById) {
            document.getElementById('theCrop').style.backgroundPosition = '-' + xPos + 'px -' + yPos + 'px';
        } else if (document.all) {
            document.all['theCrop'].style.backgroundPosition = '-' + xPos + 'px -' + yPos + 'px';
        } else {
            document.layers['theCrop'].backgroundPosition = '-' + xPos + 'px -' + yPos + 'px';
        }
    }

    function cc_showCropSize()
    {
        dd.elements.cropDimensions.write('Crop size: ' + dd.elements.theCrop.w + ' / ' + dd.elements.theCrop.h);
    }

    function cc_setSize()
    {
        element = document.getElementById('setSize');
        switch(element.value) {
        <?php
            $str
= "case '%s':
                        cc_setCropDimensions(%d, %d);
                        dd.elements.theCrop.moveTo(dd.elements.theImage.x + %d, dd.elements.theImage.y + %d);
                        cc_reposBackground();
                        break\n"
;
            if (
$this->crop['sizes']) {
                foreach (
$this->crop['sizes'] as $s => $d) {
                    list(
$w, $h) = $this->calculateCropDimensions($s);
                    list(
$x, $y) = $this->calculateCropPosition($w, $h);
                   
printf($str, $s, $w, $h, $x, $y);
                }
            }
       
?>
}
        cc_showCropSize();
    }

    function cc_setCropDimensions(w, h)
    {
        dd.elements.theCrop.moveTo(dd.elements.theImage.x, dd.elements.theImage.y);
        dd.elements.theCrop.resizeTo(w, h);
        dd.elements.theCrop.defw = w;
        dd.elements.theCrop.defh = h;
        cc_reposBackground();
    }
</script>