source: trunk/lib/Image.inc.php

Last change on this file was 763, checked in by anonymous, 2 years ago

Include boomerang in hidden input on login form so the user will be redirected if the revisit the login form after session is garbage collected. Add escape values used in html attributes.

File size: 5.6 KB
Line 
1<?php
2/**
3 * The Strangecode Codebase - a general application development framework for PHP
4 * For details visit the project site: <http://trac.strangecode.com/codebase/>
5 * Copyright 2001-2012 Strangecode, LLC
6 *
7 * This file is part of The Strangecode Codebase.
8 *
9 * The Strangecode Codebase is free software: you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as published by the
11 * Free Software Foundation, either version 3 of the License, or (at your option)
12 * any later version.
13 *
14 * The Strangecode Codebase is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17 * details.
18 *
19 * You should have received a copy of the GNU General Public License along with
20 * The Strangecode Codebase. If not, see <http://www.gnu.org/licenses/>.
21 */
22
23/**
24 * Image.inc.php
25 *
26 * @author  Quinn Comendant <quinn@strangecode.com>
27 * @version 1.1
28 * @since   14 Apr 2006 20:07:29
29 */
30class Image
31{
32
33    // Object parameters.
34    protected $_params = array();
35
36    /**
37     * Constructor.
38     *
39     * @param   array    $params  Set parameters for this object.
40     * @author  Quinn Comendant <quinn@strangecode.com>
41     * @version 1.1
42     * @since   26 Jan 2005 01:54:50
43     */
44    public function __construct($params=array())
45    {
46        if (!is_array($params)) {
47            trigger_error(sprintf('Parameters not specified properly.', null), E_USER_ERROR);
48        }
49        $defaults = array(
50            // Pattern passed to glob() with $id to match image filenames.
51            'filename_pattern' => '%s*',
52
53            // The path to the image source directory. (Ex: /var/www/htdocs/images)
54            'base_path' => '',
55
56            // The URL to the image directory. (Ex: /images)
57            'base_url' => '',
58
59            // Image to use in the case of a missing image.
60            'default_image_file' => '',
61        );
62        $this->_params = array_merge($defaults, $params);
63    }
64
65    /**
66     * Tests if an image with specified id exists on the file system.
67     *
68     * @access  public
69     * @param   string  $id     Unique image identifier.
70     * @return  bool            Existence of file.
71     * @author  Quinn Comendant <quinn@strangecode.com>
72     * @version 1.0
73     * @since   26 Jan 2005 01:54:50
74      */
75    public function exists($id)
76    {
77        $src = $this->oSrc($id);
78        $filepath = preg_match('!://!', $src) ? $src : getenv('DOCUMENT_ROOT') . $src;
79        // Use exif_imagetype to check not only file existence but that of a valid image.
80        // The return value is the same value that getimagesize() returns in index 2 but exif_imagetype() is much faster.
81        return false != @exif_imagetype($filepath);
82    }
83
84    /**
85     * Returns the value from getimagesize().
86     *
87     * @access  public
88     * @param   string  $id     Unique image identifier.
89     * @param   int     $key    Which element from the array returned by getimagesize:
90     *                   - Index 0 contains the width of the image in pixels.
91     *                   - Index 1 contains the height.
92     *                   - Index 2 is the type of the image.
93     *                   - Index 3 is height="yyy" width="xxx" string.
94     * @return  mixed   return value of getimagesize.
95     * @author  Quinn Comendant <quinn@strangecode.com>
96     * @version 1.0
97     * @since   26 Jan 2005 01:54:50
98     */
99    public function size($id, $key)
100    {
101        $src = $this->oSrc($id);
102        $filepath = preg_match('!://!', $src) ? $src : getenv('DOCUMENT_ROOT') . $src;
103        $img_size = @getimagesize($filepath);
104        return isset($img_size[$key]) ? $img_size[$key] : false;
105    }
106
107    /**
108     * Returns the URL to the source of image specified by id.
109     *
110     * @access  public
111     * @param   string  $id     Unique image identifier.
112     * @return  string  Absolute URL of image.
113     * @author  Quinn Comendant <quinn@strangecode.com>
114     * @version 1.1
115     * @since   26 Jan 2005 01:56:35
116     */
117    public function oSrc($id)
118    {
119        $file_name = '';
120        // filename_pattern is a sprintf argument with %s replaced with the image id.
121        if ($file_match = glob(sprintf("%s/{$this->_params['filename_pattern']}", $this->_params['base_path'], $id))) {
122            $file_name = basename(end($file_match));
123        } else if ('' != $this->_params['default_image_file']) {
124            $file_name = $this->_params['default_image_file'];
125        }
126        return sprintf('%s/%s', $this->_params['base_url'], $file_name);
127    }
128
129    /**
130     * Returns an HTML <img> tag with the src set to an image specified by id.
131     * Automatically prints image width and height.
132     *
133     * @access  public
134     * @param   string  $id     Unique image identifier.
135     * @param   string  $alt    Text for image alt attribute.
136     * @param   string  $extra  Additional tag attributes.
137     * @return  HTML image tag.
138     * @author  Quinn Comendant <quinn@strangecode.com>
139     * @version 1.0
140     * @since   26 Jan 2005 01:57:33
141     */
142    public function oImg($id, $alt='', $extra='')
143    {
144        $src = $this->oSrc($id);
145        $filepath = preg_match('!://!', $src) ? $src : getenv('DOCUMENT_ROOT') . $src;
146
147        if (false === ($gis = @getimagesize($filepath)) || preg_match('/width|height/', $extra)) {
148            $image_size = '';
149        } else {
150            $image_size = $gis[3];
151        }
152
153        return sprintf('<img src="%s" %s alt="%s" %s />',
154            oTxt($src),
155            $image_size,
156            oTxt($alt),
157            $extra
158        );
159    }
160} // End class
Note: See TracBrowser for help on using the repository browser.