Skip to content

Commit eed86f3

Browse files
committed
Merge MemoryImage with Image, but left addMemoryImage for backward compatibility
1 parent b24550d commit eed86f3

File tree

21 files changed

+326
-559
lines changed

21 files changed

+326
-559
lines changed

CHANGELOG.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ This release marked the transformation to namespaces (PHP 5.3+).
88

99
### Features
1010

11-
None yet.
11+
- Image: Ability to use remote or GD images using `addImage()` on sections, headers, footer, cells, and textruns - @ivanlanin
12+
- Header: Ability to use remote or GD images using `addWatermark()` - @ivanlanin
1213

1314
### Bugfixes
1415

@@ -21,7 +22,8 @@ None yet.
2122
- Use `PhpOffice\PhpWord` namespace for PSR compliance - @RomanSyroeshko @gabrielbull GH-159 GH-58
2223
- Restructure folders and change folder name `Classes` to `src` and `Tests` to `test` for PSR compliance - @RomanSyroeshko @gabrielbull
2324
- Compliance to phpDocumentor - @ivanlanin
24-
- Merge Style\TableFull into Style\Table - @ivanlanin GH-160
25+
- Merge Style\TableFull into Style\Table. Style\TableFull is deprecated - @ivanlanin GH-160
26+
- Merge Section\MemoryImage into Section\Image. Section\Image is deprecated - @ivanlanin GH-160
2527

2628
## 0.8.1 - 17 Mar 2014
2729

src/PhpWord/Media.php

Lines changed: 42 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
namespace PhpOffice\PhpWord;
2727

28-
use PhpOffice\PhpWord\Section\MemoryImage;
28+
use PhpOffice\PhpWord\Section\Image;
2929

3030
/**
3131
* Media
@@ -69,81 +69,56 @@ class Media
6969
*
7070
* @param string $src
7171
* @param string $type
72-
* @param \PhpOffice\PhpWord\Section\MemoryImage|null $memoryImage
72+
* @param \PhpOffice\PhpWord\Section\Image $image
7373
* @return mixed
7474
*/
75-
public static function addSectionMediaElement($src, $type, MemoryImage $memoryImage = null)
75+
public static function addSectionMediaElement($src, $type, Image $image = null)
7676
{
7777
$mediaId = md5($src);
7878
$key = ($type === 'image') ? 'images' : 'embeddings';
79-
8079
if (!array_key_exists($mediaId, self::$_sectionMedia[$key])) {
8180
$cImg = self::countSectionMediaElements('images');
8281
$cObj = self::countSectionMediaElements('embeddings');
8382
$rID = self::countSectionMediaElements() + 7;
84-
8583
$media = array();
86-
8784
$folder = null;
8885
$file = null;
8986
if ($type === 'image') {
9087
$cImg++;
91-
//Detect if it's a memory image first by php ext and second by regex
92-
$isMemImage = false;
93-
if (stripos(strrev($src), strrev('.php')) === 0) {
94-
$isMemImage = true;
95-
}
96-
if (!$isMemImage) {
97-
$isMemImage = (filter_var($src, \FILTER_VALIDATE_URL) !== false);
88+
if (!is_null($image)) {
89+
$isMemImage = $image->getIsMemImage();
90+
$extension = $image->getImageExtension();
91+
} else {
92+
$isMemImage = false;
9893
}
99-
$extension = '';
10094
if ($isMemImage) {
101-
$extension = $memoryImage->getImageExtension();
10295
$media['isMemImage'] = true;
103-
$media['createfunction'] = $memoryImage->getImageCreateFunction();
104-
$media['imagefunction'] = $memoryImage->getImageFunction();
105-
} else {
106-
$imageType = exif_imagetype($src);
107-
if ($imageType === \IMAGETYPE_JPEG) {
108-
$extension = 'jpg';
109-
} elseif ($imageType === \IMAGETYPE_GIF) {
110-
$extension = 'gif';
111-
} elseif ($imageType === \IMAGETYPE_PNG) {
112-
$extension = 'png';
113-
} elseif ($imageType === \IMAGETYPE_BMP) {
114-
$extension = 'bmp';
115-
} elseif ($imageType === \IMAGETYPE_TIFF_II || $imageType === \IMAGETYPE_TIFF_MM) {
116-
$extension = 'tif';
117-
}
96+
$media['createfunction'] = $image->getImageCreateFunction();
97+
$media['imagefunction'] = $image->getImageFunction();
11898
}
119-
12099
$folder = 'media';
121100
$file = $type . $cImg . '.' . strtolower($extension);
122101
} elseif ($type === 'oleObject') {
123102
$cObj++;
124103
$folder = 'embedding';
125104
$file = $type . $cObj . '.bin';
126105
}
127-
128106
$media['source'] = $src;
129107
$media['target'] = "$folder/section_$file";
130108
$media['type'] = $type;
131109
$media['rID'] = $rID;
132-
133110
self::$_sectionMedia[$key][$mediaId] = $media;
134-
135111
if ($type === 'oleObject') {
136112
return array($rID, ++self::$_objectId);
137113
}
138-
139114
return $rID;
115+
} else {
116+
if ($type === 'oleObject') {
117+
$rID = self::$_sectionMedia[$key][$mediaId]['rID'];
118+
return array($rID, ++self::$_objectId);
119+
}
120+
return self::$_sectionMedia[$key][$mediaId]['rID'];
140121
}
141-
142-
if ($type === 'oleObject') {
143-
$rID = self::$_sectionMedia[$key][$mediaId]['rID'];
144-
return array($rID, ++self::$_objectId);
145-
}
146-
return self::$_sectionMedia[$key][$mediaId]['rID'];
147122
}
148123

149124
/**
@@ -207,50 +182,42 @@ public static function countSectionMediaElements($key = null)
207182
*
208183
* @param int $headerCount
209184
* @param string $src
210-
* @param \PhpOffice\PhpWord\Section\MemoryImage|null $memoryImage
185+
* @param \PhpOffice\PhpWord\Section\Image $image
211186
* @return int
212187
*/
213-
public static function addHeaderMediaElement($headerCount, $src, MemoryImage $memoryImage = null)
188+
public static function addHeaderMediaElement($headerCount, $src, Image $image = null)
214189
{
215190
$mediaId = md5($src);
216191
$key = 'header' . $headerCount;
217-
218192
if (!array_key_exists($key, self::$_headerMedia)) {
219193
self::$_headerMedia[$key] = array();
220194
}
221-
222195
if (!array_key_exists($mediaId, self::$_headerMedia[$key])) {
223196
$cImg = self::countHeaderMediaElements($key);
224197
$rID = $cImg + 1;
225-
226198
$cImg++;
227-
$inf = pathinfo($src);
228-
$isMemImage = (substr(strtolower($inf['extension']), 0, 3) == 'php') ? true : false;
229-
230199
$media = array();
200+
if (!is_null($image)) {
201+
$isMemImage = $image->getIsMemImage();
202+
$extension = $image->getImageExtension();
203+
} else {
204+
$isMemImage = false;
205+
}
231206
if ($isMemImage) {
232-
$ext = $memoryImage->getImageExtension();
233207
$media['isMemImage'] = true;
234-
$media['createfunction'] = $memoryImage->getImageCreateFunction();
235-
$media['imagefunction'] = $memoryImage->getImageFunction();
236-
} else {
237-
$ext = $inf['extension'];
238-
if ($ext == 'jpeg') { // Office crashes when adding a jpEg Image, so rename to jpg
239-
$ext = 'jpg';
240-
}
208+
$media['createfunction'] = $image->getImageCreateFunction();
209+
$media['imagefunction'] = $image->getImageFunction();
241210
}
242-
$file = 'image' . $cImg . '.' . strtolower($ext);
243-
211+
$file = 'image' . $cImg . '.' . strtolower($extension);
244212
$media['source'] = $src;
245213
$media['target'] = 'media/' . $key . '_' . $file;
246214
$media['type'] = 'image';
247215
$media['rID'] = $rID;
248-
249216
self::$_headerMedia[$key][$mediaId] = $media;
250-
251217
return $rID;
218+
} else {
219+
return self::$_headerMedia[$key][$mediaId]['rID'];
252220
}
253-
return self::$_headerMedia[$key][$mediaId]['rID'];
254221
}
255222

256223
/**
@@ -279,50 +246,41 @@ public static function getHeaderMediaElements()
279246
*
280247
* @param int $footerCount
281248
* @param string $src
282-
* @param \PhpOffice\PhpWord\Section\MemoryImage|null $memoryImage
249+
* @param \PhpOffice\PhpWord\Section\Image $image
283250
* @return int
284251
*/
285-
public static function addFooterMediaElement($footerCount, $src, MemoryImage $memoryImage = null)
252+
public static function addFooterMediaElement($footerCount, $src, Image $image = null)
286253
{
287254
$mediaId = md5($src);
288255
$key = 'footer' . $footerCount;
289-
290256
if (!array_key_exists($key, self::$_footerMedia)) {
291257
self::$_footerMedia[$key] = array();
292258
}
293-
294259
if (!array_key_exists($mediaId, self::$_footerMedia[$key])) {
295260
$cImg = self::countFooterMediaElements($key);
296261
$rID = $cImg + 1;
297-
298262
$cImg++;
299-
$inf = pathinfo($src);
300-
$isMemImage = (substr(strtolower($inf['extension']), 0, 3) == 'php') ? true : false;
301-
302-
$media = array();
263+
if (!is_null($image)) {
264+
$isMemImage = $image->getIsMemImage();
265+
$extension = $image->getImageExtension();
266+
} else {
267+
$isMemImage = false;
268+
}
303269
if ($isMemImage) {
304-
$ext = $memoryImage->getImageExtension();
305270
$media['isMemImage'] = true;
306-
$media['createfunction'] = $memoryImage->getImageCreateFunction();
307-
$media['imagefunction'] = $memoryImage->getImageFunction();
308-
} else {
309-
$ext = $inf['extension'];
310-
if ($ext == 'jpeg') { // Office crashes when adding a jpEg Image, so rename to jpg
311-
$ext = 'jpg';
312-
}
271+
$media['createfunction'] = $image->getImageCreateFunction();
272+
$media['imagefunction'] = $image->getImageFunction();
313273
}
314-
$file = 'image' . $cImg . '.' . strtolower($ext);
315-
274+
$file = 'image' . $cImg . '.' . strtolower($extension);
316275
$media['source'] = $src;
317276
$media['target'] = 'media/' . $key . '_' . $file;
318277
$media['type'] = 'image';
319278
$media['rID'] = $rID;
320-
321279
self::$_footerMedia[$key][$mediaId] = $media;
322-
323280
return $rID;
281+
} else {
282+
return self::$_footerMedia[$key][$mediaId]['rID'];
324283
}
325-
return self::$_footerMedia[$key][$mediaId]['rID'];
326284
}
327285

328286
/**

src/PhpWord/Section.php

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
use PhpOffice\PhpWord\Section\Header;
3232
use PhpOffice\PhpWord\Section\Link;
3333
use PhpOffice\PhpWord\Section\ListItem;
34-
use PhpOffice\PhpWord\Section\MemoryImage;
3534
use PhpOffice\PhpWord\Section\Object;
3635
use PhpOffice\PhpWord\Section\PageBreak;
3736
use PhpOffice\PhpWord\Section\Settings;
@@ -250,7 +249,7 @@ public function addObject($src, $style = null)
250249
$iconSrc .= '_' . $ext . '.png';
251250
}
252251

253-
$rIDimg = Media::addSectionMediaElement($iconSrc, 'image');
252+
$rIDimg = Media::addSectionMediaElement($iconSrc, 'image', new Image($iconSrc));
254253
$data = Media::addSectionMediaElement($src, 'oleObject');
255254
$rID = $data[0];
256255
$objectId = $data[1];
@@ -276,36 +275,26 @@ public function addObject($src, $style = null)
276275
public function addImage($src, $style = null)
277276
{
278277
$image = new Image($src, $style);
279-
280278
if (!is_null($image->getSource())) {
281-
$rID = Media::addSectionMediaElement($src, 'image');
279+
$rID = Media::addSectionMediaElement($src, 'image', $image);
282280
$image->setRelationId($rID);
283-
284281
$this->_elementCollection[] = $image;
285282
return $image;
283+
} else {
284+
throw new Exception('Source does not exist or unsupported image type.');
286285
}
287-
throw new Exception('Source does not exist or unsupported image type.');
288286
}
289287

290288
/**
291289
* Add a by PHP created Image Element
292290
*
293291
* @param string $link
294292
* @param mixed $style
295-
* @return \PhpOffice\PhpWord\Section\MemoryImage
296-
* @throws \PhpOffice\PhpWord\Exceptions\Exception
293+
* @deprecated
297294
*/
298-
public function addMemoryImage($link, $style = null)
295+
public function addMemoryImage($src, $style = null)
299296
{
300-
$memoryImage = new MemoryImage($link, $style);
301-
if (!is_null($memoryImage->getSource())) {
302-
$rID = Media::addSectionMediaElement($link, 'image', $memoryImage);
303-
$memoryImage->setRelationId($rID);
304-
305-
$this->_elementCollection[] = $memoryImage;
306-
return $memoryImage;
307-
}
308-
throw new Exception('Unsupported image type.');
297+
return $this->addImage($src, $style);
309298
}
310299

311300
/**

src/PhpWord/Section/Footer.php

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -134,15 +134,13 @@ public function addTable($style = null)
134134
public function addImage($src, $style = null)
135135
{
136136
$image = new Image($src, $style);
137-
138137
if (!is_null($image->getSource())) {
139-
$rID = Media::addFooterMediaElement($this->_footerCount, $src);
138+
$rID = Media::addFooterMediaElement($this->_footerCount, $src, $image);
140139
$image->setRelationId($rID);
141-
142140
$this->_elementCollection[] = $image;
143141
return $image;
144142
} else {
145-
throw new Exception('Src does not exist or invalid image type.');
143+
throw new Exception('Source does not exist or unsupported image type.');
146144
}
147145
}
148146

@@ -151,20 +149,11 @@ public function addImage($src, $style = null)
151149
*
152150
* @param string $link
153151
* @param mixed $style
154-
* @return \PhpOffice\PhpWord\Section\MemoryImage
152+
* @deprecated
155153
*/
156-
public function addMemoryImage($link, $style = null)
154+
public function addMemoryImage($src, $style = null)
157155
{
158-
$memoryImage = new MemoryImage($link, $style);
159-
if (!is_null($memoryImage->getSource())) {
160-
$rID = Media::addFooterMediaElement($this->_footerCount, $link, $memoryImage);
161-
$memoryImage->setRelationId($rID);
162-
163-
$this->_elementCollection[] = $memoryImage;
164-
return $memoryImage;
165-
} else {
166-
throw new Exception('Unsupported image type.');
167-
}
156+
return $this->addImage($src, $style);
168157
}
169158

170159
/**

0 commit comments

Comments
 (0)