summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client/app/common/views/components/image-viewer.vue1
-rw-r--r--src/services/drive/add-file.ts34
2 files changed, 29 insertions, 6 deletions
diff --git a/src/client/app/common/views/components/image-viewer.vue b/src/client/app/common/views/components/image-viewer.vue
index b86a110337..204355b182 100644
--- a/src/client/app/common/views/components/image-viewer.vue
+++ b/src/client/app/common/views/components/image-viewer.vue
@@ -65,5 +65,6 @@ export default Vue.extend({
max-height 100%
margin auto
cursor zoom-out
+ image-orientation from-image
</style>
diff --git a/src/services/drive/add-file.ts b/src/services/drive/add-file.ts
index 0fb365c91f..d5156de6c4 100644
--- a/src/services/drive/add-file.ts
+++ b/src/services/drive/add-file.ts
@@ -25,15 +25,33 @@ const log = debug('misskey:drive:add-file');
async function save(path: string, name: string, type: string, hash: string, size: number, metadata: any): Promise<IDriveFile> {
let thumbnail: Buffer;
+ let thumbnailExt = 'jpg';
+ let thumbnailType = 'image/jpeg';
- if (['image/jpeg', 'image/png', 'image/webp'].includes(type)) {
+ if (['image/jpeg', 'image/webp'].includes(type)) {
thumbnail = await sharp(path)
- .resize(300)
+ .resize(498, 280, {
+ fit: 'inside',
+ withoutEnlargement: true
+ })
+ .rotate()
.jpeg({
- quality: 50,
+ quality: 85,
progressive: true
})
.toBuffer();
+ } else if (['image/png'].includes(type)) {
+ thumbnail = await sharp(path)
+ .resize(498, 280, {
+ fit: 'inside',
+ withoutEnlargement: true
+ })
+ .rotate()
+ .png()
+ .toBuffer();
+
+ thumbnailExt = 'png';
+ thumbnailType = 'image/png';
}
if (config.drive && config.drive.storage == 'minio') {
@@ -48,7 +66,7 @@ async function save(path: string, name: string, type: string, hash: string, size
}
const key = `${config.drive.prefix}/${uuid.v4()}${ext}`;
- const thumbnailKey = `${config.drive.prefix}/${uuid.v4()}.jpg`;
+ const thumbnailKey = `${config.drive.prefix}/${uuid.v4()}.${thumbnailExt}`;
const baseUrl = config.drive.baseUrl
|| `${ config.drive.config.useSSL ? 'https' : 'http' }://${ config.drive.config.endPoint }${ config.drive.config.port ? `:${config.drive.config.port}` : '' }/${ config.drive.bucket }`;
@@ -60,7 +78,7 @@ async function save(path: string, name: string, type: string, hash: string, size
if (thumbnail) {
await minio.putObject(config.drive.bucket, thumbnailKey, thumbnail, size, {
- 'Content-Type': 'image/jpeg',
+ 'Content-Type': thumbnailType,
'Cache-Control': 'max-age=31536000, immutable'
});
}
@@ -107,7 +125,7 @@ async function save(path: string, name: string, type: string, hash: string, size
await new Promise<IDriveFile>((resolve, reject) => {
const writeStream = thumbnailBucket.openUploadStream(name, {
- contentType: 'image/jpeg',
+ contentType: thumbnailType,
metadata: {
originalId: file._id
}
@@ -149,6 +167,10 @@ async function deleteOldFile(user: IRemoteUser) {
* @param comment Comment
* @param folderId Folder ID
* @param force If set to true, forcibly upload the file even if there is a file with the same hash.
+ * @param isLink Do not save file to local
+ * @param url URL of source (URLからアップロードされた場合(ローカル/リモート)の元URL)
+ * @param uri URL of source (リモートインスタンスのURLからアップロードされた場合の元URL)
+ * @param sensitive Mark file as sensitive
* @return Created drive file
*/
export default async function(