aboutsummaryrefslogblamecommitdiffhomepage
path: root/inc/3rdparty/libraries/send2kindle/images.php
blob: 63f0562a839e5c1ce3b51236326d7c04deeb036c (plain) (tree)







































































































































                                                                                                                 
<?php

/**
 * Get images from content and prepare to save in articles
 */
class Images {

    /**
     * JPER quality for resize
     */
    const JPEG_QUALITY = 80;

    /**
     * Articles content
     * @var string
     */
    private $_content;

    /**
     * Storage to keep images
     * @var object Storage
     */
    private $_storage;

    /**
     * images from content
     * @var array
     */
    private $_images_from_content = array();

    /**
     * Prepare get images
     * @param Strage $storage
     * @param string $article_content
     */
    public function __construct(Storage $storage, $article_content)
    {
        $this->_storage = $storage;
        $this->_content = $article_content;
        $this->_images_from_content = $this->_get_images_from_content($article_content);
    }

    /**
     * get images from url
     * @param string $content
     * @return array images hashtable
     */
    private function _get_images_from_content($content)
    {
        $result = array();
        preg_match_all('/src=\"([a-zA-Z0-9\.\/\-\_\?\+\%\~\&\;\=\:]+)\"/i', $content, $result);

        return $result[1];
    }

    /**
     * Start conversion
     * @return string converted content
     */
    public function convert()
    {
        foreach ( $this->_images_from_content as $n => $image_url )
        {
            $image = $this->_get_image($image_url);
            $this->_content = str_replace($image_url, '" recindex="'.(int)basename($image), $this->_content);
        }

        return $this->_content;
    }

    /**
     * Resize image
     * @param string $file path
     * @param int $new_width max width
     */
    private function _resize($file, $new_width = 500)
    {
        list($width, $height) = getimagesize($file);

        $new_height = 0;

        //setup the new size of the image
        if( $width > $new_width )
        {
            $ratio = $height/$width;
            $new_height = $new_width * $ratio;
        }
        else
        {
            $new_width = $width;
            $new_height = $height;
        }

        // resample the image        
        $new_image = imagecreatetruecolor($new_width, $new_height);        
        
        $type = exif_imagetype ( $file );

        switch ( $type )
        {
            case IMAGETYPE_JPEG:
                $old_image = imagecreatefromjpeg($file);
                imagecopyresampled($new_image, $old_image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                imagejpeg($new_image, $file, self::JPEG_QUALITY);
                break;
            case IMAGETYPE_PNG:
                $old_image = imagecreatefrompng($file);
                imagecopyresampled($new_image, $old_image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                imagepng($new_image, $file);
                break;
            case IMAGETYPE_GIF:
                $old_image = imagecreatefromgif($file); 
                imagecopyresampled($new_image, $old_image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
                imagegif($new_image, $file);
                break;
        }
    }

    /**
     * Resize image
     * @return string image path
     */
    private function _get_image($url)
    {
        $image_data = @file_get_contents($url);

        if ( $image_data !== false )
        {
            $image_name = $this->_storage->save_image($image_data);
            $this->_resize($image_name);

            return $image_name;
        }
    }

}