From 37edacce44cb7d63c35fee88e0b43028a1c7765c Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 9 Dec 2017 22:35:26 +0900
Subject: [PATCH] Use ImageMagick instead of GraphicsMagick

---
 docs/setup.en.md                    | 2 +-
 docs/setup.ja.md                    | 2 +-
 src/api/common/add-file-to-drive.ts | 6 +++++-
 src/file/server.ts                  | 7 ++++++-
 src/utils/dependencyInfo.ts         | 2 +-
 5 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/docs/setup.en.md b/docs/setup.en.md
index 9c31e4f177..b81245d892 100644
--- a/docs/setup.en.md
+++ b/docs/setup.en.md
@@ -53,7 +53,7 @@ Please install and setup these softwares:
 * *Node.js* and *npm*
 * **[MongoDB](https://www.mongodb.com/)**
 * **[Redis](https://redis.io/)**
-* **[GraphicsMagick](http://www.graphicsmagick.org/)**
+* **[ImageMagick](http://www.imagemagick.org/script/index.php)**
 
 ##### Optional
 * [Elasticsearch](https://www.elastic.co/) - used to provide searching feature instead of MongoDB
diff --git a/docs/setup.ja.md b/docs/setup.ja.md
index 1e8bb553fa..1662d1ee5a 100644
--- a/docs/setup.ja.md
+++ b/docs/setup.ja.md
@@ -54,7 +54,7 @@ web-push generate-vapid-keys
 * *Node.js* と *npm*
 * **[MongoDB](https://www.mongodb.com/)**
 * **[Redis](https://redis.io/)**
-* **[GraphicsMagick](http://www.graphicsmagick.org/)**
+* **[ImageMagick](http://www.imagemagick.org/script/index.php)**
 
 ##### オプション
 * [Elasticsearch](https://www.elastic.co/) - 検索機能を向上させるために用います。
diff --git a/src/api/common/add-file-to-drive.ts b/src/api/common/add-file-to-drive.ts
index dea02eeca6..109e886106 100644
--- a/src/api/common/add-file-to-drive.ts
+++ b/src/api/common/add-file-to-drive.ts
@@ -5,7 +5,7 @@ import * as stream from 'stream';
 
 import * as mongodb from 'mongodb';
 import * as crypto from 'crypto';
-import * as gm from 'gm';
+import * as _gm from 'gm';
 import * as debug from 'debug';
 import fileType = require('file-type');
 import prominence = require('prominence');
@@ -16,6 +16,10 @@ import serialize from '../serializers/drive-file';
 import event, { publishDriveStream } from '../event';
 import config from '../../conf';
 
+const gm = _gm.subClass({
+	imageMagick: true
+});
+
 const log = debug('misskey:register-drive-file');
 
 const tmpFile = (): Promise<string> => new Promise((resolve, reject) => {
diff --git a/src/file/server.ts b/src/file/server.ts
index 1f8d21b80d..187ce75c20 100644
--- a/src/file/server.ts
+++ b/src/file/server.ts
@@ -7,11 +7,15 @@ import * as express from 'express';
 import * as bodyParser from 'body-parser';
 import * as cors from 'cors';
 import * as mongodb from 'mongodb';
-import * as gm from 'gm';
+import * as _gm from 'gm';
 import * as stream from 'stream';
 
 import DriveFile, { getGridFSBucket } from '../api/models/drive-file';
 
+const gm = _gm.subClass({
+	imageMagick: true
+});
+
 /**
  * Init app
  */
@@ -78,6 +82,7 @@ function thumbnail(data: stream.Readable, type: string, resize: number): ISend {
 	const stream = g
 		.compress('jpeg')
 		.quality(80)
+		.noProfile() // Remove EXIF
 		.stream();
 
 	return {
diff --git a/src/utils/dependencyInfo.ts b/src/utils/dependencyInfo.ts
index 818fa3136c..89af0d20fb 100644
--- a/src/utils/dependencyInfo.ts
+++ b/src/utils/dependencyInfo.ts
@@ -11,7 +11,7 @@ export default class {
 	public showAll(): void {
 		this.show('MongoDB', 'mongo --version', x => x.match(/^MongoDB shell version:? (.*)\r?\n/));
 		this.show('Redis', 'redis-server --version', x => x.match(/v=([0-9\.]*)/));
-		this.show('GraphicsMagick', 'gm -version', x => x.match(/^GraphicsMagick ([0-9\.]*) .*/));
+		this.show('ImageMagick', 'magick -version', x => x.match(/^Version: ImageMagick (.+?)\r?\n/));
 	}
 
 	public show(serviceName: string, command: string, transform: (x: string) => RegExpMatchArray): void {