-
Notifications
You must be signed in to change notification settings - Fork 0
/
ImageResource.php
110 lines (95 loc) · 3.96 KB
/
ImageResource.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
namespace DynamicPDF\Api;
include_once __DIR__ . '/Resource.php';
include_once __DIR__ . '/ResourceType.php';
include_once __DIR__ . '/EndPointException.php';
/**
*
* Represents an image resource used to create an ImageInput object to create PDF from images.
*
*/
class ImageResource extends Resource
{
/**
*
* Initializes a new instance of the ImageResource class.
*
* @param string|array|stream $file The image file path or the byte array of the image file or the stream of the image file.
* @param string $resourceName The name of the resource.
*/
public function __construct($file, string $resourceName = null)
{
parent::__construct($file, $resourceName);
$this->Type = ResourceType::Image;
}
public $_Type = ResourceType::Image;
public $_MimeType;
public function _FileExtension()
{
$fileHeader = substr($this->_Data, 0, 16);
$byteArray = array();
for ($i = 0; $i < strlen($fileHeader); $i++) {
$byteArray[$i] = ord($fileHeader[$i]);
}
if (ImageResource::IsPngImage($byteArray)) {
$this->_MimeType = "image/png";
return ".png";
} else if (ImageResource::IsJpegImage($byteArray)) {
$this->_MimeType = "image/jpeg";
return ".jpeg";
} else if (ImageResource::IsGifImage($byteArray)) {
$this->_MimeType = "image/gif";
return ".gif";
} else if (ImageResource::IsTiffImage($byteArray)) {
$this->_MimeType = "image/tiff";
return ".tiff";
} else if (ImageResource::IsJpeg2000Image($byteArray)) {
$this->_MimeType = "image/jpeg";
return ".jpeg";
} else if (ImageResource::IsValidBitmapImage($byteArray)) {
$this->_MimeType = "image/bmp";
return ".bmp";
} else {
throw new EndPointException("Not supported image type or invalid image.");
}
}
private static function IsJpeg2000Image(array $header)
{
return ($header[0] == 0x00 && $header[1] == 0x00 && $header[2] == 0x00 && $header[3] == 0x0C && $header[4] == 0x6A &&
$header[5] == 0x50 && ($header[6] == 0x1A || $header[6] == 0x20) && ($header[7] == 0x1A || $header[7] == 0x20) &&
$header[8] == 0x0D && $header[9] == 0x0A && $header[10] == 0x87 && $header[11] == 0x0A) ||
($header[0] == 0xFF && $header[1] == 0x4F && $header[2] == 0xFF && $header[3] == 0x51 && $header[6] == 0x00 && $header[7] == 0x00);
}
private static function IsPngImage(array $header)
{
return $header[0] == 0x89 && $header[1] == 0x50 && $header[2] == 0x4E && $header[3] == 0x47 &&
$header[4] == 0x0D && $header[5] == 0x0A && $header[6] == 0x1A && $header[7] == 0x0A;
}
private static function IsTiffImage(array $header)
{
return ($header[0] == 0x49 && $header[1] == 0x49 && $header[2] == 0x2A && $header[3] == 0x00) ||
($header[0] == 0x4D && $header[1] == 0x4D && $header[2] == 0x00 && $header[3] == 0x2A);
}
private static function IsGifImage(array $header)
{
return $header[0] == 0x47 && $header[1] == 0x49 && $header[2] == 0x46 && $header[3] == 0x38 && ($header[4] == 0x37 ||
$header[4] == 0x39) && $header[5] == 0x61;
}
private static function IsJpegImage(array $header)
{
return $header[0] == 0xFF && $header[1] == 0xD8 && $header[2] == 0xFF;
}
private static function IsValidBitmapImage(array $header)
{
return $header[0] == 0x42 && $header[1] == 0x4D;
}
public function GetJsonSerializeString()
{
$inputjson = array();
$inputjson['type'] = "image";
$inputjson['align'] = 1;
$inputjson['vAlign'] = 1;
$inputjson['resourceName'] = $this->ResourceName;
return $inputjson;
}
}