मैं सिम्फनी 2.1 के साथ LiipImagineBundle का उपयोग कर रहा हूं और स्थायी फाइल सिस्टम स्थान पर सहेजने से पहले अपलोड पर उपयोगकर्ता अपलोड की गई छवियों का आकार बदलना चाहता हूं (मेटाडेटा को पट्टी करने के लिए, जेपीजी प्रारूप लगाएं, और फ़ाइल के आकार को सीमित करें)। मुझे नियंत्रक से 'स्ट्रिप' और 'आकार बदलें' फ़िल्टर को कॉल करना होगा और फिर फ़िल्टर किए गए चित्र को अस्थायी स्थान से फाइल सिस्टम में मेरे चयन के फ़ोल्डर में सहेजना होगा।अपलोड के बाद छवि का आकार बदलने के लिए LiipImagineBundle का उपयोग करें?
मैंने LiipImageBundle Controller as a service as indicated in the bundle's readme का उपयोग करने की कोशिश की लेकिन कहा जाता है कि कार्रवाई मुख्य रूप से कैश निर्देशिका में फ़िल्टर की गई छवि बनाने के लिए होती है जब छवि को प्रदर्शित करने के लिए अनुरोध किया जाता है (अपलोड करने के दौरान फ़िल्टरिंग के लिए इसका उपयोग करना एक और मामला है)। मैंने इसे किसी भी तरह से लागू करने की कोशिश की, और इसे काम करने के लिए मिला। फ़िल्टर को लागू करने में सक्षम होने के लिए मुझे पहले वेब सर्वर की निर्देशिका में वेब सर्वर की php अस्थायी निर्देशिका से फ़ाइल को स्थानांतरित करना था। दूसरा, मैंने फ़िल्टर को लागू किया और प्रारंभिक unfiltered फ़ाइल हटा दिया (अनलिंक())। अंत में, मुझे फाइल सिस्टम में स्थायी स्थान पर फ़िल्टर की गई फ़ाइल (नाम बदलें) को स्थानांतरित करना पड़ा। फ़ाइल को दो बार स्थानांतरित करना आवश्यक था, फ़िल्टर को एक बार लागू करें, और इसे सभी काम करने के लिए 1 फ़ाइल हटाएं (अनलिंक करें)। अपलोड पर बंडल का उपयोग करने के लिए कोई बेहतर तरीका है (इंटरमीडिएट चाल की आवश्यकता नहीं है)?
liip_imagine:
filter_sets:
my_filter:
format: jpeg
filters:
strip: ~
thumbnail: { size: [1600, 1000], mode: inset }
A similar question was asked for the ImagineAvalancheBundle लेकिन कोई अधिक से अधिक जानकारी दिए गए हैं:
class MyController extends Controller
{
public function new_imageAction(Request $request)
{
$uploadedFile = $request->files->get('file');
$tmpFolderPathAbs = $this->get('kernel')->getRootDir() . '/../web/uploads/tmp/';
$tmpImageNameNoExt = rand();
$tmpImageName = $tmpImageNameNoExt . '.' . $fileExtension;
$uploadedFile->move($tmpFolderPathAbs, $tmpImageName);
$tmpImagePathRel = '/uploads/tmp/' . $tmpImageName;
// Create the filtered image in a tmp folder:
$this->container->get('liip_imagine.controller')->filterAction($request, $tmpImagePathRel, 'my_filter');
unlink($tmpFolderPathAbs . $tmpImageName);
$filteredImagePathAbs = $this->get('kernel')->getRootDir() . '/../web/uploads/cache/my_filter/uploads/tmp/' . $tmpImageNameNoExt . '.jpeg';
$imagePath = $imageManagerResponse->headers->get('location');
// define permanent location ($permanentImagePathAbs)...
rename($filteredImagePathAbs, $permanentImagePathAbs);
}
}
एप्लिकेशन/config/config.yml में मेरे फिल्टर इस प्रकार है। शायद another service from the here provided list लागू करना एक बेहतर समाधान है?
क्या तुमने कभी एक बेहतर समाधान मिला:
उसके बाद निम्न कोड का उपयोग करें? मुझे भी यही चाहिए। फ़िल्टर अच्छी तरह से काम करता है, लेकिन जब मेरे पास बहुत सारे थंबनेल होते हैं तो प्रदर्शन बहुत अच्छा नहीं होता है, जिससे उन्हें कैश से स्थानांतरित समय पर ज्ञात स्थान पर ले जाया जाता है, जो नाटकीय रूप से चीजों को गति देता है। –
@ पीटरवॉस्टर: मुझे एक और समाधान नहीं मिला, लेकिन ऊपर वर्णित एक व्यक्ति ठीक काम करता है (मैंने इसे इस तरह रखा है)। – RayOnAir
मैं एक समाधान पर काम कर रहा हूं और यह काम करता है जब यहां काम करेगा। –