1.1.0 • Published 9 years ago
@sep/graphql-image-server v1.1.0
GraphQL Image Server
Originals are stored on AWS S3. Images are edited and served via Imgix. Supported files are PNG, JPG and GIF.
Setup
import { uploadImage, GraphQLImage, GraphQLImageInput } from '@bayerischer-rundfunk/graphql-image-server';
const crops = {square: 1};
// query
new GraphQLObjectType({
fields: {
image: GraphQLImage(crops, 'yourdomain.imgix.net'),
},
});
// mutation
new GraphQLInputObjectType({
fields: {
image: GraphQLImageInput(crops),
},
});GraphQLImage
A GraphQLType for querying images. These arguments are available, all are optional:
widthResized width of the imageheightResized height of the imageaspectRatioName of a crop (see setup).UNCROPPEDis also possible.qualityJPEG quality from 0 to 100. Default is 75.blurGaussian blur from 0 to 2000.
Example:
{
image(width: 400, crop: SQUARE)
}GraphQLImageInput
A GraphQLInputType for uploading images. These fields are available:
fileName of the multipart request field containing the image, URL of an image to be uploaded, or URL of the already uploaded image (in the latter case, it is not reuploaded again).cropsList of cropsaspectRatioName of the crop (see setup).xUpper x-valueyLeft y-valuewidthWidth of the crop. Height is calculated according to the aspect-ratio given in the configuration.
uploadImages
In your resolve-function, you can replace all uploadImages(object, files, s3Config).
resolve(parent, args, context) {
args.inputObject = await uploadImages(
args.inputObject,
context.request.files,
{
region: string,
bucket: string,
accessKeyId: string,
secretAccessKey: string,
prefix: string,
}
);
// save your inputObject
}This function needs multer to parse the multipart requests and the request object to be stored on the context
graphQLServer.use(multer({ storage: multer.memoryStorage() }).any());
graphQLServer.use('/graphql', graphqlHTTP(request => ({
schema,
context: { request },
graphiql: true,
})));Usage
mutation {
item({
file: "Name of the multipart form field the file is transmitted in or an URL of an image.",
crops: [{
aspectRatio: SQUARE,
x: 100,
y: 80,
width: 1024,
}]
}) {
image(width: 400, aspectRatio: SQUARE)
}
}